在Rails控制器中传递params以自动进行多个输入

时间:2016-11-04 14:50:34

标签: ruby-on-rails

在我的用户编辑表单中,我有以下HTML:

<p>Name: <%= f.text_field :name %></p>

<p>Email: <%= f.text_field :email %></p>

<% for role in Role.all %>
    <p>
      <%= check_box_tag "user[roles][]", role.id, @user.roles.include?(role) %>
      <%= role.name %>
    </p>
<% end %>

所以我有nameemail和一堆关联的roles

通常在控制器中我会做类似的事情:

@user = User.new(user_params)

和params是:

def user_params
  params.require(:user).permit(:name, :email)
end

但是,如何处理角色的保存?我可以自动保存表单上的所有参数,而无需手动声明它们。

我试过了:

if @user.update(params)

但它没有用。有没有办法将所有参数保存到正确的模型中?

2 个答案:

答案 0 :(得分:3)

您需要在user_params中指定数组,并指定它是一个数组。

def user_params
  params.require(:user).permit(:name, :email, role_ids: [])
end

答案 1 :(得分:0)

如果你真的不想......

,你不必使用强参数

@user.update(params[:user])

但强烈推荐。为了安全起见