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])
请帮帮我,我该怎么做?
虽然是个老问题,恕我直言,正确答案是这个->
在 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])
你将不得不使用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})
我无法让 current top answer 工作。
reverse_merge
本身似乎不会迭代调用 reverse_merge
到 comments_attributes
的嵌套 ActionController::Parameters
版本。相反,我需要做这样的事情:
_params = params.require(:task).permit(:summary, comments_attributes: [:id, :content])
_params.reverse_merge!(user_id: current_user.id)
_params[:comments_attributes].each do |key, value|
_params[:comments_attributes][key] = value.reverse_merge(user_id: current_user.id, project_id: project.id)
end
_params
很高兴听到是否有更直接的答案!