Маршрутизация наследования одной таблицы с помощью Rails 3.1 - PullRequest
1 голос
/ 24 февраля 2012

У меня небольшие проблемы с настройкой маршрутизации для работы с наследованием одной таблицы в моем приложении на 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?Как я уже сказал, страница будет отображаться, если я уберу ссылки «показать», «изменить» и «удалить».С чего бы это?

Спасибо за любую помощь!

1 Ответ

1 голос
/ 26 февраля 2012

Хорошо, я понял это сам, и это было довольно очевидно.Я забыл сделать несколько простых маршрутизации в моем файле rout.rb.В моем случае все, что мне нужно было добавить, это одна строка:

resources :web_segment, :controller => 'segments'
...