这是我的模型:
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。但我们如何指定这些值呢?
我想问题的关键是我真的想要一个单一的选择菜单来指定与两个不同属性(topic_id 和 topic_type)相对应的两个值。有没有优雅的railsy方式来做到这一点?
一些注意事项:
a)单表继承将使这个问题消失,但我想避免这种情况,因为类别和主题有自己的关系......我将不告诉你细节。
b) 我可能会搞一些 JavaScript 恶作剧,是吗?但这听起来很混乱,如果有更干净的方法来做到这一点,一些魔法形式的帮助者或其他东西,那么这当然是更好的选择。
c) 虽然我使用的是 simple_form,但我并不热衷于它,以防事情变得复杂。
Thanks