Ich aktualisiere von Rails 4 auf 4.2. Ich habe einen Benutzer-Controller, der etwa wie folgt aussieht:ArgumentError: Beim Zuweisen von Attributen müssen Sie einen Hash als Argument übergeben
user_controller.rb
class UsersController < ApplicationController
def new
end
def edit
end
protected
def create_with_token
@user.attributes = params[:user]
@user.validate_password = true
if @user.save
else
render 'new'
end
end
private
def user_params
params.require(:user).permit(
:email, :first_name, :last_name, :password, :more_attributes
)
end
end
Ich bin nicht sicher, doch wenn dies hat etwas mit strong_params zu tun. Aber soweit ich weiß params[:user]
gibt einen Hash zurück. Warum bekomme ich ArgumentError: When assigning attributes, you must pass a hash as an argument.
auf @user.attributes = params[:user]
?
überprüfte ich die rails code und gefunden:
def assign_attributes(new_attributes)
if !new_attributes.respond_to?(:stringify_keys)
raise ArgumentError, "When assigning attributes, you must pass a hash as an argument."
end
return if new_attributes.empty?
attributes = new_attributes.stringify_keys
_assign_attributes(sanitize_for_mass_assignment(attributes))
end
Von hier aus unter der Annahme #assign_attributes
#attributes
ersetzt (es ist eigentlich ein alias dafür entnehme ich, dass params[:user]
nicht #stringify_keys
reagiert Aber warum Wie Was ist..?? ? die Arbeit rund um
sollten Sie 'user_params', aber ich erwartete ein' forbiddenAttributesError' –