Ruby on rails 简单表单关联字段未预先选择所选元素
我在Rails中有一个带有“虚拟”关联的Ruby on rails 简单表单关联字段未预先选择所选元素,ruby-on-rails,ruby,activerecord,associations,simple-form,Ruby On Rails,Ruby,Activerecord,Associations,Simple Form,我在Rails中有一个带有“虚拟”关联的消息数据模型。也就是说,返回“关联对象”集合的方法,但它不是ActiveRecord意义上的实际关联 class Message def recipients @recipients end def recipients=(arr) @recipients = arr end end 简单表单的问题是,当我尝试显示关联字段时,它失败了,因为没有:收件人关联: = simple_form_for(@message) do
消息
数据模型。也就是说,返回“关联对象”集合的方法,但它不是ActiveRecord意义上的实际关联
class Message
def recipients
@recipients
end
def recipients=(arr)
@recipients = arr
end
end
简单表单的问题是,当我尝试显示关联
字段时,它失败了,因为没有:收件人
关联:
= 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
预先选择所选元素吗?好吧,这很尴尬。发布这篇文章后,我想到了一个解决问题的办法:
class Message
# ...
def recipient_ids
# ...
end
def recipient_ids=(arr)
# ...
end
end
我将recipient\u id
getter和setter,添加到我以前拥有的关联getter和setter中
然后我更新了表单输入字段以引用:recipient\u id
,而不是:recipients
:
= simple_form_for(@message) do |f|
= f.input :recipient_ids, as: :select, collection: Recipient.all