使用Rails进行单表继承路由3.1

时间:2012-02-24 02:35:07

标签: ruby-on-rails-3 routing single-table-inheritance

我在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”的链接,将显示该页面。为什么会这样?

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

好的,我自己想出来了,这很明显。我忘了在routes.rb文件中做一些简单的路由。在我的情况下,我需要添加的是一行:

resources :web_segment, :controller => 'segments'