У меня небольшие проблемы с настройкой маршрутизации для работы с наследованием одной таблицы в моем приложении на Rails 3.1.Сейчас у меня есть две модели, с которыми я имею дело: урок и сегмент .Мое приложение состоит из уроков, которые имеют несколько разных типов сегментов.Эти сегменты бывают разных типов, поэтому я использую наследование одной таблицы.Я смог подтвердить, что мое наследование работает через консоль Rails, но когда я пытаюсь просмотреть разные страницы, у меня возникают проблемы.Одна из этих страниц находится в режиме просмотра # Уроки #.Я получаю эту ошибку:
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
сегмент.rb
class Segment < ActiveRecord::Base
TYPE = ['FileSegment','WebSegment','MediaSegment','QuizSegment']
belongs_to :lesson
end
web_segment.rb
class WebSegment < Segment
end
Я знаю, что мне не хватает наследования для других типов, но сейчас я сосредоточен на том, чтобы заставить работать только тип WebSegment.Кто-нибудь знает, почему Rails пытается найти метод 'web_segment_path', когда я ссылаюсь на @segment?Как я уже сказал, страница будет отображаться, если я уберу ссылки «показать», «изменить» и «удалить».С чего бы это?
Спасибо за любую помощь!