2012-02-24 29 views
1

我在使用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'?就像我说的那样,如果我删除指向“显示”,“编辑”和“删除”的链接,页面将显示。为什么会这样?

谢谢你的帮助!

+0

你可以在这里发布'耙的输出routes'这里(见路线定义了什么)? – Hck 2012-02-24 09:04:32

+0

当调用rake路由时,我没有看到任何提及web_segment_path的内容。你还想看看完整的输出吗? – Rhawb 2012-02-25 21:08:56

回答

1

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

resources :web_segment, :controller => 'segments'