问题
params.require(:task).permit(:summary, comments_attributes: [:id, :content])
I want to add user_id and project_id in comments_attributes.
user_id = current_user.id
project_id = project.id
I tried with below but not working
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])
Please help me how can I do this?
回答1:
you will have to use 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])
回答2:
Although an old question, the right answer IMHO is this ->
In Rails 5, instead of .to_h.deep_merge
you should use reverse_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])
回答3:
Convert permitted params to hash first, and then deep merge the hash:
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
]
)
回答4:
params[:task][:comments_attributes].merge!({user_id: current_user.id, project_id: project.id})
来源:https://stackoverflow.com/questions/40981206/how-to-merge-nested-attributes-in-permit-rails