Ruby on Rails:检查商店拥有的产品数量

Nek*_*eko 3 ruby ruby-on-rails

我正在搞乱测试/练习项目,只是为了更好地理解Rails.

在我的情况下,我有三个模型:商店,用户和产品.

商店可以有三种类型:基本,中等,大型.基本最多可以有10个产品,中等50个,大100个.

我正在尝试验证这种数据,Shop的类型,并检查它在创建新产品时拥有多少产品.

到目前为止,我想出了这个代码(在shop.rb中),但它不起作用:

  def lol
      account = Shop.find_by_sql "SELECT account FROM shops WHERE user_id = 4 LIMIT 1"
    products = Product.count_by_sql "SELECT COUNT(*) FROM products WHERE shop_id = 13"
    if account = 1 && products >= 10
        raise "message"
    elsif   account = 2 && products >= 50
        raise "message"
    else account = 3 && products >= 100
        raise "message"
    end
end
Run Code Online (Sandbox Code Playgroud)

我甚至不知道我的解决方案背后的逻辑是正确的还是什么.也许我应该验证使用

has_many
Run Code Online (Sandbox Code Playgroud)

和它的"大小"方法?我不知道.:)

Mis*_*cha 6

至少account = 1改为account == 1.这同样适用于account = 2account = 3.

除此之外,我建议你看看Rails指南,以了解使用Rails.

话虽如此,我建议这样的事情:

class Shop < ActiveRecord::Base
  has_many :products
  validates :products_within_limit

  # Instead of the 'account' column, you could make a 'max_size' column.
  # Then you can simply do:
  def products_within_limit
    if products.size > max_size
      errors.add_to_base("Shop cannot own more products than its limit")
    end
  end

  def is_basic?
    products.size >= 10 && products.size < 50 
  end

  def is_medium?
    products.size >= 50 && products.size < 100
  end

  def is_big?
    products.size >= 100
  end

  def shop_size
    if self.is_basic?
      'basic'
    elsif self.is_medium?
      'medium'
    elsif self.is_big?
      'big'
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

这允许你这样做:

# Get shop with id = 1
shop = Shop.find(1)

# Suppose shop '1' has 18 products:
shop.is_big? # output false
shop.is_medium? # output false
shop.is_basic? # output true
shop.shop_size # output 'basic'
Run Code Online (Sandbox Code Playgroud)