我有一个RESTful更新模型的控制器。该行动如下:
def update
@user = User.find(params[:id])
params['skill_list'] = params['skill_list'].join(',') if params['skill_list'].present?
@user.update!(user_params)
render nothing: true
end
def user_params
params.permit(:id, :summary, :skill_list)
end
我的规格如下:
it "should return 200 if param is for user put is summary" do
ActionController::Parameters.action_on_unpermitted_parameters = :raise
put :update, id: @bob.id, summary: 'yadayada', skill_list: ['a','b']
assert_response 200
end
现在流程如下
id
放在put
规范中,以告知更新时id
使用哪个。{/ li>
summary
和skill_list
字段。id
。id
,则测试会因ActionController::UnpermittedParams
id
会被替换(我们使用friendly_id
gem以便不需要 - 数字ID将被slug替换,导致用户无法使用。 目前我们禁止id
并将规范置于待定状态 - 但这些情况下的最佳做法是什么?
提前致谢!
答案 0 :(得分:1)
患者:我更新ID栏时会感到疼痛!
医生:然后停止这样做。
从允许的参数列表中删除“id”。它不属于那里。
使用以下内容更新模型
@user.update!(user_params)
更新ID列,因为user_params
包含id
密钥。停止这样做:
@user.update!(user_params.except("id"))