2016-11-24 116 views
0

綜觀the documentation for ActionController::Parameters for the require method我讀followiing軌道4 - 的ActionController不能要求2個鍵

當給定鍵的陣列,所述方法試圖需要它們中的每一個在次序。如果成功,返回了各自的返回值的數組:

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

但是當我rails console運行此代碼,我的輸出是非常不同的

[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' 

當我讀到when given an array of keys和鋸這個例子,我認爲寫這個例子時他們可能犯了一個錯誤,所以我也嘗試了這個,但它也不起作用。

[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' 

這是怎麼回事?

回答

0

你試過:

def user_params 
params.require(:user) 
end 

def profile_params 
params.require(:profile) 
end 

這樣,你必須爲每個模型兩個單獨的規則。

+0

是的,,,但目標是將它們傳遞到一起.. –