Предположим, у меня есть приложение Rails 4, которое управляет объектами Widget
, и с использованием простого наследования таблиц У меня есть специализации Widget::Foo
и Widget::Bar
.Создание общих путей для моделей STI в Rails 4
Я хотел бы управлять всеми объектами Widget
через один WidgetsController
.
У меня есть следующие модели:
class Widget < ActiveRecord::Base; end
class Widget::Foo < Widget
# Foo specific details...
end
class Widget::Bar < Widget
# Bar specific details...
end
И простой контроллер:
class WidgetsController < ApplicationController
def index
@widgets = Widget.all
end
def show
@widget = Widget.find(params[:id])
end
end
Мои маршруты включают
resources :widgets, only: [:index, :show}
В моих index.html.haml
у меня есть что-то вроде:
- @widgets.each do |widget|
= link_to "View your widget!", [@widget]
В этом случае все идет не так.
Между url_for
и polymorphic_path
Rails попытается найти widget_foo_path
, а не использовать сохранившуюся widget_path
.
Я бы предпочел не добавлять дополнительные маршруты или контроллеры, и я бы предпочел не указывать хелпер URL вручную. Есть ли способ сказать Rails, что Widget::Foo
и Widget::Bar
объекты должны быть связаны с использованием помощника widget_path
?