簡體   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