Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby Rails 4设备3.2使用自定义属性注册,未知属性错误_Ruby_Devise_Ruby On Rails 4_Nested Attributes_Strong Parameters - Fatal编程技术网

Ruby Rails 4设备3.2使用自定义属性注册,未知属性错误

Ruby Rails 4设备3.2使用自定义属性注册,未知属性错误,ruby,devise,ruby-on-rails-4,nested-attributes,strong-parameters,Ruby,Devise,Ruby On Rails 4,Nested Attributes,Strong Parameters,这个问题看起来很简单,让我抓狂,到目前为止已经花费了我数周的生产时间,我看这个问题不会很快消失,因为它会在嵌套属性出现的任何地方出现 Started POST "/users" for 127.0.0.1 at 2013-11-12 04:56:03 +0100 Processing by Devise::RegistrationsController#create as HTML Parameters: {"utf8"=>"✓", "authenticity_token"=>"

这个问题看起来很简单,让我抓狂,到目前为止已经花费了我数周的生产时间,我看这个问题不会很快消失,因为它会在嵌套属性出现的任何地方出现

Started POST "/users" for 127.0.0.1 at 2013-11-12 04:56:03 +0100
Processing by Devise::RegistrationsController#create as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"afucNMlRRQkgBeKVVwOQxvjtMtvCDPiQLilr7TXXnUg=", "user"=>{"email"=>"test7@test.com", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]", "first_name"=>"test7", "last_name"=>"test7", "preferred_language"=>"en", **"master_data_contact_information"=>**{"contact_email"=>"test7@test.com", "primary_phone_number"=>"23452352345234", "secondary_phone_number"=>"324523453245", "fax_number"=>"23452345234"}, "group_token"=>""}, "commit"=>"Register"}
Completed 500 Internal Server Error in 96ms

ActiveRecord::UnknownAttributeError (unknown attribute: master_data_contact_information):
怎么会不知道呢?就在那里

def configure_permitted_parameters
  devise_parameter_sanitizer.for(:sign_in) { |u| u.permit(:email) }
  devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:email, :password,
  :password_confirmation, :first_name,
  :last_name, :preferred_language,
  :group_token,
  :master_data_contact_information =>
    [:contact_email, :primary_phone_number, :secondary_phone_number, :fax_number ]
 ) }
end

如果我将其更改为:

def configure_permitted_parameters
  devise_parameter_sanitizer.for(:sign_in) { |u| u.permit(:email) }
  devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:email, :password,
  :password_confirmation, :first_name,
  :last_name, :preferred_language,
  :group_token
  ) }
end
我明白了

那么,如何处理嵌套资源和强参数呢


在RubyMine控制台中运行时,它工作正常

params = ActionController::Parameters.new user: {"email"=>"test5@test.com", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]",
                                                 "first_name"=>"testqr", "last_name"=>"nsdfjkhasdfjk", "preferred_language"=>"en", "group_token"=>"",
                                                 "master_data_contact_information"=>
                                                     {"contact_email"=>"test10@test.com", "primary_phone_number"=>"786789678678",
                                                      "secondary_phone_number"=>"56675675876567", "fax_number"=>"2456246"}}



p = params.require(:user).permit(:email, :password, :password_confirmation, :first_name,
                                 :last_name, :preferred_language, :group_token,
                                 :master_data_contact_information => [:contact_email, :primary_phone_number, :secondary_phone_number, :fax_number ]
)
一切都是闪亮的


我知道Rails核心人员希望使Rails更加安全,但这占用了我很多时间

是的,它在简单的模型上非常有效


当事情开始变得有点复杂时,一切都会失去。

尝试将
:master\u data\u contact\u information
更改为
:master\u data\u contact\u information\u attributes

所以你有这样的东西:

def configure_permitted_parameters
  devise_parameter_sanitizer.for(:sign_in) { |u| u.permit(:email) }
  devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:email, :password,
  :password_confirmation, :first_name,
  :last_name, :preferred_language,
  :group_token,
  :master_data_contact_information_attributes =>
    [:contact_email, :primary_phone_number, :secondary_phone_number, :fax_number ]
 ) }
end
def configure_permitted_parameters
  devise_parameter_sanitizer.for(:sign_in) { |u| u.permit(:email) }
  devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:email, :password,
  :password_confirmation, :first_name,
  :last_name, :preferred_language,
  :group_token,
  :master_data_contact_information_attributes =>
    [:contact_email, :primary_phone_number, :secondary_phone_number, :fax_number ]
 ) }
end