更新Rails中嵌套资源的操作

时间:2015-09-20 15:01:33

标签: ruby-on-rails ruby ruby-on-rails-4 activerecord rails-activerecord

我的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,而不是具有所有表属性的实际哈希对象。 更新偏好的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

只需加载首选项,然后执行update

preference = Preference.find_by!(user_id: user_id)
preference.update(preferences_request)

render json: preference

您必须处理查询返回nil的情况(例如,因为用户不存在)。 preferences_request必须是attributes => values的哈希值。当然,您可能也想验证它和/或使用强参数功能来过滤您不想更新的属性。