Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 简单表单关联字段未预先选择所选元素_Ruby On Rails_Ruby_Activerecord_Associations_Simple Form - Fatal编程技术网

Ruby on 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

我在Rails中有一个带有“虚拟”关联的
消息
数据模型。也就是说,返回“关联对象”集合的方法,但它不是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