【问题标题】:Implementing has_many :through to Subcategories in Rails 4在 Rails 4 中实现 has_many :through 到子类别
【发布时间】:2014-03-17 16:03:14
【问题描述】:

我想为我的产品实现子类别。

到目前为止,我有这个:

class Category < ActiveRecord::Base
  has_many :subcategories, dependent: :destroy
end

class Subcategory < ActiveRecord::Base
  has_one :category
  has_many :products
end

class Product < ActiveRecord::Base
  belongs_to :subcategory
end

它工作得很好,但是我想更进一步,通过这些模型之间的关联来实现一个 has_many,这样每个产品都将通过一个子类别属于一个类别(这样我就可以检查有多少产品在总共某个类别等)。但似乎无法正确处理。这是否有意义,还是我应该坚持使用我在上面的第一个版本?

【问题讨论】:

标签: ruby-on-rails ruby-on-rails-4 associations


【解决方案1】:

要检查某个类别中有多少产品,如何添加:

class Category < ActiveRecord::Base
  has_many :products, through: :subcategories
end

相反(即从产品到类别),我的理解是 Rails 没有 belongs_to :through 关联类型。你可以做的是:

class Product < ActiveRecord::Base
  def category
    subcategory.category
  end
end

另一种简写方式是使用delegate

class Product < ActiveRecord::Base
  delegate :category, to: :subcategory, prefix: false
end

【讨论】:

  • 我必须在子类别模型中指定什么样的关系?
  • 您可以在示例中保持不变,或者按照@Coenwulf 的建议,将has_one :category 更改为belongs_to :category
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-05-30
  • 1970-01-01
  • 2019-03-04
  • 2016-11-19
  • 2014-09-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多