我的routes.rb
中有一个嵌套资源# routes.rb
resources :users do
resource :preferences, :only => [:create,:show,:update,:destroy]
end
现在要更新用户的偏好,我使用
preferences = Preference.where(:user_id => user_id).update_all(preferences_request)
render json: preferences, status: 200
但我认为使用update_all
并不是一个好习惯,因为每个用户只有一个偏好。此外,我无法使用render :json => preferences
,因为preferences
将具有值1
,而不是具有所有表属性的实际哈希对象。
更新偏好的最佳方法是什么?
答案 0 :(得分:1)
只需加载首选项,然后执行update
。
preference = Preference.find_by!(user_id: user_id)
preference.update(preferences_request)
render json: preference
您必须处理查询返回nil的情况(例如,因为用户不存在)。 preferences_request
必须是attributes => values
的哈希值。当然,您可能也想验证它和/或使用强参数功能来过滤您不想更新的属性。