Вот мои модели:
class Lesson < ActiveRecord::Base
belongs_to :topic, :polymorphic => true
validates_presence_of :topic_type, :topic_id
end
class Subject < ActiveRecord::Base
has_many :lessons, :as => :topic
end
class Category < ActiveRecord::Base
has_many :lessons, :as => :topic
end
Теперь мне нужна форма, которая позволит пользователю создавать или обновлять уроки. Вопрос в том, как я могу предоставить меню выбора, которое предлагает сочетание тем и категорий? (Для пользователя в этой конкретной форме Темы и Категории взаимозаменяемы, но это не так в других местах.)
В идеале это должно выглядеть примерно так:
просмотры/уроки/_form.html.haml
= simple_form_for(@lesson) do |f|
= f.input :title
= f.association :topic, :collection => (@subjects + @categories)
Это не сработает, потому что мы будем указывать только id_темы, а нам нужны и типы_тем. Но как мы можем указать эти значения?
Я предполагаю, что суть проблемы в том, что мне действительно нужно одно меню выбора, в котором указаны два значения, соответствующие двум разным атрибутам (topic_id и theme_type). Есть ли какой-нибудь элегантный рельсовый способ сделать это?
Несколько заметок:
а) Наследование одной таблицы устранило бы эту проблему, но я хотел бы избежать этого, поскольку категории и темы имеют свои собственные отношения... Я избавлю вас от подробностей.
б) Я мог бы использовать некоторые махинации с javascript, да? Но это звучит грязно, и если есть более чистый способ сделать это, какой-нибудь магический помощник формы или что-то в этом роде, то это, безусловно, предпочтительнее.
c) Хотя я использую simple_form, я не привязан к нему, если это усложняет ситуацию.
Спасибо