嵌套表单未正确更新文件字段
Nested Form Not Updating File Fields Properly
我有一个嵌套表单,其中包含用户、配置文件和专业详细信息模型的字段。用户有一个配置文件。个人资料有许多专业详细信息(包含一个文档作为文件字段和一个描述文本字段)。
我在这里面临的问题是在更新我的个人资料页面时,这是这 3 个模型的嵌套形式。当我添加新的专业详细信息并提交表单时,旧的专业详细信息将变为零,并创建专业详细信息的新对象。参数是这样的
{"utf8"=>"✓", "_method"=>"patch","authenticity_token"=>"+pPcQC1hVJ+u0NS+ApOJbfwGG4NCBkURUA+BZ4ZaTMpMKQihrymC7aVl59D89SnGxt08kCMItqph2yXkOp1WsQ==",
"user"=>
{"dob"=>"1944-06-07",
"name"=>"Etikazzz",
"tag_list"=>"",
"profile_attributes"=>
{"gmc_number"=>"",
"phone_number"=>"919999999999",
"description"=>"hellloo",
"job_description"=>"Engineer1",
"professional_details_attributes"=>
{"0"=>{"description"=>"fg", "id"=>"139"},
"1"=>
{"document"=>
#<ActionDispatch::Http::UploadedFile:0xbdd3d160
@content_type="application/pdf",
@headers=
"Content-Disposition: form-data; name=\"user[profile_attributes][professional_details_attributes][1][document]\"; filename=\"pdf-sample.pdf\"\r\nContent-Type: application/pdf\r\n",
@original_filename="pdf-sample.pdf",
@tempfile=#<File:/tmp/RackMultipart20150722-2984-onumi8.pdf>>,
"description"=>"sd"}},
"id"=>"74"}},
"commit"=>"Complete Profile",
"controller"=>"profiles",
"action"=>"complete_profile"}
"0"=>{"description"=>"fg", "id"=>"139"},
这是旧的专业详细信息对象。更新用户后,文档部分变为零。
为什么之前存储的Document在这种情况下会变成nil?
正如我所说,在您的 strong_params
方法中添加一个 :id
应该可以解决您的问题
params.require(:user).permit(:id,:tag_list,:email,:role_ids, :activation_token,:uid,:provider,:password,:password_confirmation,:name,:avatar,:dob, profile_attributes: [:id,:address,:country_id,:state_id,:city,:gmc_number,:phone_number,:description,:job_description,professional_details_attributes:[:document,:id,:description,:_destroy]])
我有一个嵌套表单,其中包含用户、配置文件和专业详细信息模型的字段。用户有一个配置文件。个人资料有许多专业详细信息(包含一个文档作为文件字段和一个描述文本字段)。
我在这里面临的问题是在更新我的个人资料页面时,这是这 3 个模型的嵌套形式。当我添加新的专业详细信息并提交表单时,旧的专业详细信息将变为零,并创建专业详细信息的新对象。参数是这样的
{"utf8"=>"✓", "_method"=>"patch","authenticity_token"=>"+pPcQC1hVJ+u0NS+ApOJbfwGG4NCBkURUA+BZ4ZaTMpMKQihrymC7aVl59D89SnGxt08kCMItqph2yXkOp1WsQ==",
"user"=>
{"dob"=>"1944-06-07",
"name"=>"Etikazzz",
"tag_list"=>"",
"profile_attributes"=>
{"gmc_number"=>"",
"phone_number"=>"919999999999",
"description"=>"hellloo",
"job_description"=>"Engineer1",
"professional_details_attributes"=>
{"0"=>{"description"=>"fg", "id"=>"139"},
"1"=>
{"document"=>
#<ActionDispatch::Http::UploadedFile:0xbdd3d160
@content_type="application/pdf",
@headers=
"Content-Disposition: form-data; name=\"user[profile_attributes][professional_details_attributes][1][document]\"; filename=\"pdf-sample.pdf\"\r\nContent-Type: application/pdf\r\n",
@original_filename="pdf-sample.pdf",
@tempfile=#<File:/tmp/RackMultipart20150722-2984-onumi8.pdf>>,
"description"=>"sd"}},
"id"=>"74"}},
"commit"=>"Complete Profile",
"controller"=>"profiles",
"action"=>"complete_profile"}
"0"=>{"description"=>"fg", "id"=>"139"},
这是旧的专业详细信息对象。更新用户后,文档部分变为零。 为什么之前存储的Document在这种情况下会变成nil?
正如我所说,在您的 strong_params
方法中添加一个 :id
应该可以解决您的问题
params.require(:user).permit(:id,:tag_list,:email,:role_ids, :activation_token,:uid,:provider,:password,:password_confirmation,:name,:avatar,:dob, profile_attributes: [:id,:address,:country_id,:state_id,:city,:gmc_number,:phone_number,:description,:job_description,professional_details_attributes:[:document,:id,:description,:_destroy]])