2016-11-24 2 views
0

Глядя на the documentation for ActionController::Parameters for the require method Я прочитал followiingRails 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' 

Что здесь происходит?

ответ

3

Вы просматриваете документы API для текущей версии Rails (это Rails 5), и вы используете Rails 4.2.1. Рельсы 4 документы не указать несколько аргументов, чтобы require подобное:

http://api.rubyonrails.org/v4.2.1/classes/ActionController/Parameters.html#method-i-require

+0

OUCH! Спасибо за это! Вы случайно знаете, как добиться этого на Rails 4? –

+0

К сожалению, я этого не делаю, извините. – sevenseacat

0

Вы пробовали:

def user_params 
params.require(:user) 
end 

def profile_params 
params.require(:profile) 
end 

Таким образом, у вас есть два отдельных правила для каждой модели.

+0

Да, да, но цель состоит в том, чтобы передать их вместе. –