我在Rails中有一个Message
数据模型,具有“虚拟”关联。也就是说,一个返回“关联对象”集合的方法,但它不是ActiveRecord意义上的实际关联。
class Message
def recipients
@recipients
end
def recipients=(arr)
@recipients = arr
end
end
simple_form的问题是,当我尝试显示association
字段时,它会失败,因为没有:recipients
关联:
= simple_form_for(@message) do |f|
= f.association :recipients, collection: Recipient.all
解决方案似乎很简单,我继续使用f.input
as: :select
选项:
= simple_form_for(@message) do |f|
= f.input :recipients, as: :select, collection: Recipient.all
这样可以正常工作,除了它不会自动检测@message.recipients
中已有的值,以便在呈现表单时预先选择元素。
如果Message#recipients
是实际关联,则在ActiveRecord意义上,表单中的f.association
也会执行此操作。但由于超出此问题范围的原因,我无法将其视为真正的关联。
接下来的问题是,我是否可以f.input :recipients, as: :select
预先选择所选元素?
答案 0 :(得分:2)
class Message
# ...
def recipient_ids
# ...
end
def recipient_ids=(arr)
# ...
end
end
我将recipient_ids
getter和setter,以及添加到我以前的关联getter和setter中。
然后我更新了表单输入字段以引用:recipient_ids
而不是:recipients
:
= simple_form_for(@message) do |f|
= f.input :recipient_ids, as: :select, collection: Recipient.all