ruby-on-rails - 推荐用于存储颜色选项的数据库模式

标签 ruby-on-rails postgresql ruby-on-rails-4 database-design

我有一个使用 PostgreSQL 的 Rails 4 应用程序。我的应用程序提供了一张 table 列表。每张 table 可以有一种或多种颜色(蓝色、红色、绿色等...)

给定一张 table 模型,存储每张 table 可用颜色的最佳方法是什么?

我可以做类似 Desk.color_options 的事情,只得到一个列表,但如果我想显示所有红色的 table ,我将无法有效地对 table 记录进行排序。

最佳答案

我可能会做这样的事情来开始:

class Product < ApplicationRecord
  has_many :product_options
  scope :with_variant, -> (variant) {
    joins(:product_options).merge(ProductOption.by_variant(variant))
  }
end

class ProductOption < ApplicationRecord
  belongs_to :product
  belongs_to :variant
  validates :stock_level, numericality: 0..1000

  scope :by_variant, -> (variant) { where(variant: variant) }
end

class Variant < ApplicationRecord
  scope :by_attr, -> (attr_name, attr_value) { 
    where(attribute: attr_name, value: attr_value)
  }
end

如果你想找到所有的 table :

Product.all

如果你只想要红色的 table :

Product.by_variant(Variant.by_attr('color', 'red'))

关于ruby-on-rails - 推荐用于存储颜色选项的数据库模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41941247/

相关文章:

ruby-on-rails - 登录 Rails,是否会影响性能?

sql - 在层次结构表 PostgreSQL 上选择查询

sql - 替换为 postgresql 的等价物,然后自动递增一个 int

postgresql - 如何防止 Postgres 中的幻读?

ruby-on-rails-4 - config.active_record.default_timezone = :local . .. 似乎没有任何效果

ruby-on-rails - 无法按名称和主键搜索

css - Rails 4 - Heroku,预编译 Assets 失败

ruby-on-rails - Carrierwave 重新创建版本

ruby-on-rails - 将 Rails 应用程序部署到不使用数据库的 Heroku

ruby-on-rails - 如何让 capybara 找到快速出现和消失的元素(加载微调器)