提问人:Nico Nisaw 提问时间:7/2/2021 最后编辑:Nico Nisaw 更新时间:7/2/2021 访问量:74
在 require 方法中免除属性
Exempt an attribute in require method
问:
我正在维护一个当前的 Web 应用程序(Ruby on Rails)。
我们的客户希望我将此属性添加到以下方法中:contacts_attributes: [:id, :stock_holding_status]
def meeting_log_params
params.require(:meeting_log).permit(
:id,
:stock_id,
:ir_meeting_id,
:start_at,
:end_at,
:kind,
:meeting_type,
:request_agent_company,
:request_agent_name,
:minute_taker,
:subject,
:content,
:memo,
:rating,
:country,
:city,
:attachment_1,
:remove_attachment_1,
:attachment_2,
:remove_attachment_2,
:attachment_3,
:remove_attachment_3,
interviewers_attributes: [
:id,
:meeting_log_id,
:resource_id,
:resource_type,
:_destroy
],
speakers_attributes: [
:id,
:meeting_log_id,
:resource_id,
:resource_type,
:_destroy
],
meeting_log_contacts_attributes: [
:stock_id,
:company_name,
:name,
],
ir_guests_attributes: [
:stock_id,
:department,
:title,
:last_name,
:first_name,
:department_en,
:title_en,
:last_name_en,
:first_name_en,
]
)
end
只是每次我在下面的此方法上使用添加的属性时,它都会返回我一个 422 错误(这意味着不可处理的实体)。
Contact.update_stock_holding_statuses(meeting_log_params[:contacts_attributes])
我认为这是因为在方法之前。你能告诉我如果我要在某些方法上使用添加的属性,如何豁免吗?required(:meeting_log)
permit
required(:meeting_log)
就像我想到的一样:
params.require(:meeting_log ? :meeting_log : nil).permit( <all_attributes>)
我尝试使用三元运算符来免除/禁用所需的部分,以便我使用特定方法上的添加属性并防止 422 干扰。但它没有用。contacts_attributes: [:id, :stock_holding_status]
请提出任何建议。
谢谢!
答:
1赞
Joel Blum
7/2/2021
#1
简单来说怎么样
permitted_attributes = [:id,
:stock_id,
:ir_meeting_id,
:start_at,
:end_at,
:kind,
...
]
def meeting_log_params
meeting_log ? params.require(:meeting_log).permit(permitted_params) : params.permit(:permitted_params)
1赞
Nik
7/2/2021
#2
据我所知,如果输入参数不匹配,那么你会得到代码 400(不是 422)。
代码 422 很可能与update_stock_holding_statuses方法中的模型验证有关。require.permit
评论
0赞
Nico Nisaw
7/2/2021
实际上,有一个单独的方法,其中包含客户希望我们添加的输入参数。 def contact_params params.permit( contacts_attributes: [ :id, :stock_holding_status, ] ) end 此方法有效,不会返回 422 错误。只是我们的客户希望将所有属性/参数放在一个方法中。那么,通过修改模型的验证来使其工作吗?
1赞
Nik
7/2/2021
如果您计划通过meeting_log_params方法的参数创建/更新联系人,则需要为 MeetingLog 模型添加“accepts_nested_attributes_for :contacts”(更多信息请在此处 api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/...)
1赞
Lam Phan
7/5/2021
如果输入参数不匹配,则会引发错误require.permit
UnpermittedParameters
评论