Rails如何限制属性更新

Rails how to restrict attribute updates

我得到一个对象,Rating,有 2 个字段,user_idvalue.

class CreateRatings < ActiveRecord::Migration[5.1]
     def change
       create_table :ratings do |t|
          t.belongs_to :user
          t.integer :user_id
          t.decimal :value
       end
     end
end

创建时,我想将 user_id 和值设置为来自控制器的给定值:

@rating = Rating.create(user_id: 1, value: 2)

但是在我创建它之后,应该无法更改user_id属性。只是 值属性 。那么在那之后:

@rating.update(user_id: 2, value: 3)

@rating.user_id 仍应 return 1,但值应为 3。

我的想法是使用 before_update 来还原更改,但我觉得这不对。

是另一种方法吗?

我希望我能更清楚地说明我的问题是什么..

谢谢

更新

控制器看起来像这样:

  def create
     Rating.create(rating_params)
  end

   def edit
     Rating.find(params[:id]).update(rating_params)
   end

   private

   def rating_params
      params.require(:rating).permit(:user_id, :value)
   end

你可以用一些 strong_params 来做到这一点。更新时根本不允许user_id。沿着这些线的东西:

class RatingsController
  def create
    @rating = Rating.create(create_rating_params)
    ...
  end

  def update
    @rating = Rating.find(params[:id])
    @rating.update_attributes(update_rating_params)
    ...
  end

  private

  def create_rating_params
    params.require(:rating).permit(:user_id, :value)
  end

  def update_rating_params
    params.require(:rating).permit(:value)
  end
end