【问题标题】:How can i make a rails model invalid如何使 Rails 模型无效
【发布时间】:2011-02-07 11:36:01
【问题描述】:

我有一个独特产品的产品模型。所以当一个用户购买了这个模型时,没有人可以再次购买它,卖家不能和买家同一个人。

当我购买产品时,我调用方法 product.buy(buyer)。但是当买家 = 卖家并且 date.sale != nil 时,这种方法应该使模型无效。但这不起作用。我该如何解决?

   def buy(buyer)
    if self.user != buyer

      if self.date_sale.nil? 
        self.date_sale = Time.now
        self.buyer = buyer
      else
        # self.errors.add(:buyer, "article bougth") # Dont't work
      end             
    else
       # self.errors.add(:buyer, "seller can not buyer") # Dont't work
    end  
  end

【问题讨论】:

    标签: ruby-on-rails ruby validation


    【解决方案1】:

    要处理 nil date_sale,请将其添加到您的模型之上:

    validate_presence_of :date_sale
    

    要检查买家是否可以这样做!= 卖家

    validate :buyer_is_not_seller
    
    def buyer_is_not_seller
      errors.add(:buyer, "shouldn't be seller") if buyer.id == seller.id
    end
    

    【讨论】:

    • 小错误:验证:buyer_is_not_seller
    • 您好,谢谢,但我仅在用户执行购买方法时才需要此验证。我与_date_sale 核对文章已售出。当我每次检查 date_sale != nil 时,这意味着每篇文章都已售出。
    【解决方案2】:

    验证内容可能有效:

    class Domain
      validates_presence_of :name, on: :renew
    end
    
    domain = Domain.new
    domain.valid?(:renew) # false
    

    http://api.rubyonrails.org/classes/ActiveModel/Validations.html#method-i-valid-3F

    【讨论】:

      猜你喜欢
      • 2014-07-16
      • 1970-01-01
      • 2014-09-15
      • 2015-12-14
      • 1970-01-01
      • 1970-01-01
      • 2011-07-24
      • 1970-01-01
      • 2023-03-09
      相关资源
      最近更新 更多