这是我的模型:
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)的两个值。有没有优雅的轨道方式来做到这一点?
几点注意事项:
a) 单表继承可以解决这个问题,但我想避免这种情况,因为类别和主题有它们自己的关系……我就不详细说明了。
b)我可能会拉一些javascript恶作剧,是吗?但这听起来很混乱,如果有更清洁的方法,一些魔法形式的助手或其他东西,那么这当然是可取的。
c) 虽然我使用的是 simple_form,但我并不喜欢它,以防万一事情变得复杂。
谢谢