我在使用Rails 3.1应用程序中的单表继承工作时遇到了一些问题。现在我有两个模型,我正在处理:课和段。我的应用程序包含具有多种不同类型细分的课程。这些段有很多不同的类型,这就是为什么我使用单表继承。我已经能够确认我的继承正在通过Rails控制台工作,但是当我尝试查看不同的页面时,我遇到了问题。其中一个页面位于Lessons#show视图中。我得到这个错误:使用Rails 3.1的单表继承路由
NoMethodError in Lessons#show
Showing web/app/views/lessons/show.html.erb where line #21 raised:
undefined method `web_segment_path' for #<#<Class:0x007f8faf1366b8>:0x007f8faf118320>
这里的代码块,我得到这个错误:
<% @segments.each do |segment| %>
<tr>
<td><%= segment.title %></td>
<td><%= segment.segmenttype %></td>
<td><%= segment.type %></td>
<td><%= segment.url %></td>
<td><%= segment.filepath %></td>
<td><%= link_to 'Show', @segment %></td> <!-- This is the line with the error, if I remove this and the following two than everything is displayed properly -->
<td><%= link_to 'Edit', edit_segment_path(segment) %></td>
<td><%= link_to 'Destroy', segment, confirm: 'Are you sure?', method: :delete %></td>
</tr>
<% end %>
我很困惑,因为我从来没有定义web_segment_path路线,我希望它的路线如前所述,并且只显示可用的每个段,而不管类型如何。我已经建立了以下型号:
lesson.rb
class Lesson < ActiveRecord::Base
belongs_to :course
has_many :segments
end
segment.rb
class Segment < ActiveRecord::Base
TYPE = ['FileSegment','WebSegment','MediaSegment','QuizSegment']
belongs_to :lesson
end
web_segment.rb
class WebSegment < Segment
end
我知道我缺少的遗产其他类型,但现在我专注于获取WebSegment类型的工作。有谁知道为什么Rails会在我引用@segment时尝试查找方法'web_segment_path'?就像我说的那样,如果我删除指向“显示”,“编辑”和“删除”的链接,页面将显示。为什么会这样?
谢谢你的帮助!
你可以在这里发布'耙的输出routes'这里(见路线定义了什么)? – Hck 2012-02-24 09:04:32
当调用rake路由时,我没有看到任何提及web_segment_path的内容。你还想看看完整的输出吗? – Rhawb 2012-02-25 21:08:56