2016-11-24 2 views
0

the documentation for ActionController::Parameters for the require method bei der Suche des I followiing lesenSchienen 4 - Action nicht 2 Schlüssel erfordern, können

wenn ein Array von Tasten gegeben, versucht das Verfahren, einen jeden von ihnen, um zu verlangen. Wenn es erfolgreich ist, wird ein Array mit den jeweiligen Rückgabewerte zurückgegeben:

params = ActionController::Parameters.new(user: { ... }, profile: { ... }) 
user_params, profile_params = params.require(:user, :profile) 

aber wenn ich diesen Code ausführen mit rails console, meine Ausgabe ist sehr unterschiedlich

[70] pry(main)> params = ActionController::Parameters.new(user: { a: 1 }, profile: { b: 2 }) 
=> {"user"=>{"a"=>1}, "profile"=>{"b"=>2}} 
[71] pry(main)> user_params, profile_params = params.require(:user, :profile) 
ArgumentError: wrong number of arguments (2 for 1) 
from /home/myuser/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/actionpack-4.2.1/lib/action_controller/metal/strong_parameters.rb:244:in `require' 

Als ich das las when given an array of keys und Säge Zum Beispiel dachte ich, dass sie beim Schreiben des Beispiels vielleicht einen Fehler gemacht haben, also habe ich das auch versucht, aber es hat auch nicht funktioniert.

[72] pry(main)> user_params, profile_params = params.require([:user, :profile]) 
ActionController::ParameterMissing: param is missing or the value is empty: [:user, :profile] 
from /home/myuser/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/actionpack-4.2.1/lib/action_controller/metal/strong_parameters.rb:249:in `require' 

Was geht hier vor?

Antwort

0

Haben Sie versucht:

def user_params 
params.require(:user) 
end 

def profile_params 
params.require(:profile) 
end 

Auf diese Weise haben Sie zwei separate Regeln für jedes Modell.

+0

Ja, aber das Ziel ist es, sie zusammen zu geben .. –