Rails:如何使用循环使用form_for创建复选框列表?

时间:2017-05-08 17:23:32

标签: ruby-on-rails

我正在尝试创建一个包含复选框列表的表单。

<%= form_for(@user, url: creators_path) do |f| %>
  <%= f.label :name %>
  <% Subject.all.each do |subject| %>
    <%= f.label subject.name %>
    <%= f.check_box :subject_ids, class: 'form-control' %>
  <% end %>
  <%= f.submit "Save changes", class: "btn btn-primary" %>
<% end %>

我希望生成的user_params包含所选主题的ID数组。

使用上面的代码,我得到:

> params.require(:user)
  <ActionController::Parameters {"name"=>"John", "subject_ids"=>"0"} permitted: true>

但我希望“subject_ids”成为一个数组:

> params.require(:user)
  <ActionController::Parameters {"name"=>"John", "subject_ids"=>[0,1,2,3]} permitted: true>

在Rails表单中处理集合的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

你应该使用像这样的强大的参数

def safe_params
  params.require(:user).permit(:name, subject_ids: [])
end

并在你的行动中

def create
  ..
  safe_params[:subject_ids] # will now be an array
  ..
end