ここに私のモデルがあります:
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)
topic_id のみを指定し、topic_types も必要であるため、これは機能しません。しかし、どうすればこれらの値を指定できるのでしょうか?
問題の核心は、2 つの異なる属性 (topic_id と topic_type) に対応する 2 つの値を指定する単一の選択メニューが本当に欲しいということだと思います。これを行うためのエレガントなレールのような方法はありますか?
いくつかのメモ:
a) 単一のテーブルの継承により、この問題は解消されますが、カテゴリとサブジェクトには独自の関係があるため、これは避けたいと思います。詳細は割愛します。
b) JavaScript の悪ふざけができるかもしれませんね。しかし、それは面倒に聞こえます。それを行うためのよりクリーンな方法、魔法のフォームヘルパーなどがある場合、それは確かに望ましいです.
c) 私は simple_form を使用していますが、問題が複雑になる場合に備えて、それに固執していません。
ありがとう