我想在以下参数中访问usr_additional_users_attributes?我该怎么做?
params.require(:usr_contact).permit(:first_name, :last_name, :dob, :gender,
:mobile, :email, :password,
:password_confirmation,
:image,
usr_contact_vendors_attributes:
[:id, usr_vendor_property_attributes:
[:shop_name, :specified_area, :mobile, :website,
usr_vendor_branches_attributes:
[:address_line1, :address_line2, :city ,:zip_code ],
usr_additional_users_attributes:[:id,:email,:role, :_destroy]]] )
结束
我想在控制器中将其像这样,然后将电子邮件放在数组中。这个显示错误
params[:usr_contact][:usr_contact_vendors_attributes][:usr_vendor_property_attributes][:usr_additional_users_attributes].values.each do |item|
@emailSet << item[:email]
end
nil:nilclass
未定义的方法`[]'有什么建议?
您必须使用DIG,因为当您尝试访问其中一个参数时,它们是无效的,因此Ruby提出了此例外。通过使用dig
,就像在访问它之前先检查所有属性一样。也可以使用item[:email].present?
您的代码看起来像:
params.dig(:usr_contact, :usr_contact_vendors_attributes, :usr_vendor_property_attributes, :usr_additional_users_attributes).values.each do |item|
@emailSet << item[:email] if item[:email].present?
end
我有一个示例,说明我在我的情况下如何做:
def patient_params
params.require(:patient).permit(*permited_patient_attributes)
end
def permited_patient_attributes
[
:user_id,
:start,
patient_demographic_attributes: [
:id,
:patient_id,
:start_date,
:end_date,
:first_name,
:middle_name,
:last_name,
:date_of_birth,
:gender,
:ethnicity,
:marital_status],
patient_contact_attributes: [
:id,
:patient_id,
:street_address,
:extended_address,
:locality,
:region,
:postal_code,
:country],
patient_email_attributes: [
:id,
:email],
patient_mrn_attributes: [
:id,
:patient_id,
:mrn],
contact_telephones_attributes: [
:id,
:party_type,
:party_id,
:name,
:number,
:_destroy],
patient_physicians_attributes: [
:id,
:patient_id,
physician_id: []]
]
end
在这里,患者_demographic_attributes,detter_contact_attributes。被嵌套了。尝试
您需要在将其推向数组之前,确保您的item
不是零。最简单的方法是添加检查item
是否为nil。
@emailSet << item[:email] unless item.nil?
我通过打印参数修复了它。这是这样的
{"0"=>{"usr_vendor_property_attributes"=>{"shop_name"=>"cbhcvbcvb", "specified_area"=>"cbcvbcb", "website"=>"bcbc@gmail.com", "mobile"=>"3543243", "usr_vendor_branches_attributes"=>{"1493800739760"=>{"address_line1"=>"", "address_line2"=>"", "city"=>"", "zip_code"=>""}}, "usr_additional_users_attributes"=>{"1493800739774"=>{"email"=>"sdgdfgd", "role"=>"Role1", "_destroy"=>"false"}}}}} permitted: false>
我想念[" 0"],这就是问题。然后,参数可以像这样访问控制器。
@test = params[:usr_contact][:usr_contact_vendors_attributes]["0"][:usr_vendor_property_attributes][:usr_additional_users_attributes]
感谢您的帮助:D