17

我有这段代码,同时使用simple_form

= simple_form_for :report do |f|
  = f.association :presets,
    :collection => @account.presets.collect{ |p| [p.name, p.id] },
    :as => :check_boxes

我如何预先选择一个特定的preset复选框,知道它的 IDpreset是在内部传递的params[:preset_id]?复选框的 HTMLname属性是report[preset_ids][].

4

4 回答 4

30

根据 simple_form 文档:

关联助手只是在后台调用输入,因此所有可用于 :select、:radio 和 :check_boxes 的选项也可用于关联。此外,您可以手动指定集合,连同提示:

   f.association :company, :collection
      => Company.active.all(:order => 'name'), :prompt => "Choose a Company"

所以,你应该使用这样的东西:

= simple_form_for :report do |f|
  = f.association :presets,
    :collection => @account.presets.collect{ |p| [p.name, p.id] },
    :as => :check_boxes,
    :checked => params[:preset_id]

我没有使用 simple_form 的经验,但这可能会有所帮助:)

于 2011-04-15T12:02:34.223 回答
25

给大家一个更新。:selected 选项对我不起作用。我用了:

:checked => [2, 3]

希望它可以帮助某人。

于 2012-04-23T20:18:00.360 回答
1

f.association 真的成功了,谢谢:),对于预选、保存和所有事情,我没有足够的声誉来投票给你的答案(@claudio-acciaresi)这就是我在这里评论的原因......

这是我的片段:

<%= f.association :association, collection: Model.all, 
      value_method: :id, label_method: :name, 
      as: :check_boxes, include_blank: false %>

将符号 :association 替换为模型中的当前 has_many。将 Model.all 替换为您的源数据。

希望它对其他人有用:)

问候。

于 2013-02-27T20:18:54.120 回答
0

Don't forget to cast params[:preset_id] to integer:

params[:preset_id].to_i
于 2012-01-26T13:05:40.593 回答