我有一个对象评分,有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
答案 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