繁体   English   中英

如何在permit + Rails中合并嵌套属性

[英]How to merge nested attributes in permit + Rails

params.require(:task).permit(:summary, comments_attributes: [:id, :content])

我想在comments_attributes中添加user_idproject_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM