Rails如何限制属性更新

时间:2017-10-27 13:37:22

标签: ruby-on-rails model beforeupdate

我有一个对象评分,有2个字段, user_id

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和value设置为来自Controller的给定值:

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

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

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

@ rating.user_id仍应返回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

1 个答案:

答案 0 :(得分:1)

你可以用一些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