simple_form关联字段不预先选择所选元素

时间:2014-05-20 20:18:25

标签: ruby-on-rails ruby activerecord associations simple-form

我在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预先选择所选元素?

1 个答案:

答案 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