【发布时间】:2017-10-27 13:37:22
【问题描述】:
我有一个对象,Rating,有 2 个字段,user_id 和 value。
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 设置为来自控制器的给定值:
@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
【问题讨论】:
-
这对我来说听起来完全是一团糟……为什么你有 两个 列来表示显然应该是一个布尔属性的?不要
permit某些属性,或者为某些用户角色设置一些policies......但最重要的是,您需要向我们展示您的代码。我们无法以目前模糊的形式回答这个问题。 -
@TomLord:
changeable和not_changeable可能只是为了真实属性而选择的假名。例如photo和email。 -
@SergioTulentsev:就是这样。没有意识到它利用了遮阳篷。
-
@IoaneSharvadze:谢谢,这就是我要找的,之前没找到。
标签: ruby-on-rails model beforeupdate