неправильное количество аргументов (2 вместо 1) Rails 4. Возможно, проблема с strong_params

Я использую 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

Форма, которая отправляет параметры:

<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

Я предполагаю, что это как-то связано с изменением attr_accessible на Strong Paramenters в Rails 4, но я не уверен. Если это так, где мне разместить частный метод?


person Dave Olson    schedule 03.08.2013    source источник


Ответы (2)


Эта строка содержит ошибку, потому что update_attributes принимает только один параметр, а вы пытаетесь передать 2 параметра. Я предлагаю вам передать второй параметр, объединяющий ваш хэш params[:user].

так должно быть :

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

на месте:

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

Надеюсь, это поможет. Спасибо.

person Rails Guy    schedule 03.08.2013
comment
Спасибо, поэтому, когда я меняю его на if @user.update_attibutes(params[:user]), я теперь получаю ошибку ActiveModel::ForbiddenAttributesError - person Dave Olson; 03.08.2013
comment
Хорошо, я говорю, что это сработало с помощью частного метода в моем пользовательском контроллере. - person Dave Olson; 03.08.2013

Я столкнулся с той же проблемой. И мое решение - создать частный метод в пользовательском контроллере и изменить параметры обновления.

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

тогда

if @user.update_attributes!(user_params)

Это отлично работает со мной!

person ithinco    schedule 21.12.2013