假设我正在更新名为status
的属性。我不希望status
能够在当前cancelled
或complete
时更新。我怎么能不允许这样做,但允许更新status
?
答案 0 :(得分:2)
您可以使用before_update
回调。
before_update :prevent_update_if_status_canceled_or_completed?
private
def prevent_update_if_status_canceled_or_completed?
if status == 'canceled' || status == 'complete'
self.errors.add_to_base "Cannot update a completed or canceled record "
false
else
true
end
end
答案 1 :(得分:0)
您可以使用transitions gem。它非常整洁。
答案 2 :(得分:0)
您可以在为该用户创建状态时进行检查。
def create
@user = User.find(params[:user_id])
unless @user.status == "cancelled" || @user.status == "completed"
@status = @user.statuses.new(status_params)
if @status.save!
respond_to do |format|
...
#status created logic, render desired content to user
end
end
else
#Handle status not created logic
end
end
答案 3 :(得分:-1)
我猜你有一个update
方法,如:
def update
params[:model_name].delete :status if @model_name.status == "cancelled"
@model_name = @model_name.update(model_params) # model_params are the parameters you're allowing with strong parameters.
.....
end
使用条件语句从strong参数中删除status
。
或者,您可以创建一个private
方法来排除status
的更新。
def except_satatus_params
params[:model_name].except(:status)
end
然后在控制器上使用此方法,检查@model.status
之前是cancelled
还是complete
。