错误的参数数量(2对1)Rails 4.也许strong_params问题

时间:2013-08-03 15:42:32

标签: ruby-on-rails strong-parameters

我正在使用Rails 4与Devise,Cancan和Rollify。

我有一个用户的索引,其中有一个模式可以更改角色。但是当我尝试更新角色时,我收到以下错误:“错误的参数数量(2为1)”

错误发生在我的用户控制器代码的第16行:

13   def update
14     authorize! :update, @user, message: 'Not authorized as an administrator.'
15     @user = User.find(params[:id])
16     if @user.update_attributes(params[:user], as: :admin)
17       redirect_to users_path, notice: "User updated."
18     else
19       redirect_to users_path, alert: "Unable to update user."
20     end
21   end

发送params的表单是:

<div id="role-options-<%= user.id %>" class="reveal-modal medium" style="display: none;">
  <%= simple_form_for user, url: user_path(user), html: {method: :put, class: 'custom' } do |f| %>
  <h3>Change Role</h3>
  <%= f.input :role_ids, collection: Role.all, as: :radio_buttons, label_method: lambda {|t| t.name.titleize}, label: false, item_wrapper_class: 'inline', checked: user.role_ids.first %>
      <%= f.submit "Change Role", class: "small button" %>
      <a class="close-reveal-modal" href="#">Close</a>
  <% end %>
</div>

这是我的角色模型:

class Role < ActiveRecord::Base
  has_and_belongs_to_many :users, :join_table => :users_roles
  belongs_to :resource, :polymorphic => true

  scopify
end

我猜这与Rails 4中attr_accessible到Strong Paramenters的变化有关,但我不确定。如果是,我在哪里放私人方法?

2 个答案:

答案 0 :(得分:2)

此行包含错误,因为update_attributes只接受一个参数,您尝试传递2个参数。我建议你传递你的第二个参数与你的params[:user]哈希合并。

它应该是:

if @user.update_attributes(params[:user])

取代:

if @user.update_attributes(params[:user], as: :admin)

希望它会有所帮助。谢谢

答案 1 :(得分:2)

我遇到了同样的问题。我的解决方案是在用户控制器中创建一个私有方法并更改更新参数。

private
  def user_params
    params.require(:user).permit!
  end

然后

if @user.update_attributes!(user_params)

这对我很好!