[英]How to merge nested attributes in permit + Rails
params.require(:task).permit(:summary, comments_attributes: [:id, :content])
我想在comments_attributes中添加user_id和project_id 。
user_id = current_user.id
project_id = project.id
我尝试过以下但没有工作
params.require(:task).permit(:summary, comments_attributes: [:id, :content]).merge(user_id: current_user.id, comments_attributes: [user_id: current_user.id, project_id: project.id])
请帮帮我怎么做?
你将不得不使用deep_merge
params.require(:task).permit(:summary, comments_attributes: [:id, :content]).deep_merge(user_id: current_user.id, comments_attributes: [user_id: current_user.id, project_id: project.id])
首先将允许的参数转换为哈希值,然后深度合并哈希值:
params.require(:task).permit(
:summary,
comments_attributes: [
:id,
:content
]
).to_h.deep_merge(
user_id: current_user.id,
comments_attributes: [
user_id: current_user.id,
project_id: project.id
]
)
params[:task][:comments_attributes].merge!({user_id: current_user.id, project_id: project.id})
虽然一个老问题,正确答案恕我直言这是 - >
在Rails 5中,您应该使用reverse_merge而不是.to_h.deep_merge
params.require(:task).permit(:summary, comments_attributes: [:id, :content]).reverse_merge(user_id: current_user.id, comments_attributes: [user_id: current_user.id, project_id: project.id])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.