繁体   English   中英

Rails不允许在特定条件下更新属性

[英]Rails don't allow attribute to update under a certain condition

假设我要更新一个名为status的属性。 我不希望status在当前cancelledcomplete时能够被更新。 我怎么不能允许它,但是要允许status以其他方式更新?

您可以使用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

您可以使用转场gem 非常整洁。

您可以在为该用户创建状态时简单地进行检查。

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

我猜你有一个像这样的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是否先前cancelledcomplete

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM