我在Rails 3.1应用程序中使用单表继承进行路由时遇到了一些麻烦。现在我有两个我正在处理的模型:课程和段。我的应用程序包含具有多种不同类型段的课程。这些段有许多不同的类型,这就是我使用单表继承的原因。我已经能够确认我的继承是通过Rails控制台工作,但当我尝试查看不同的页面时,我遇到了问题。其中一个页面位于课程#show视图中。我收到这个错误:
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'吗?就像我说的,如果我删除“show”,“edit”和“delete”的链接,将显示该页面。为什么会这样?
感谢您的帮助!
答案 0 :(得分:1)
好的,我自己想出来了,这很明显。我忘了在routes.rb文件中做一些简单的路由。在我的情况下,我需要添加的是一行:
resources :web_segment, :controller => 'segments'