Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何将多个类别和子类别与产品/广告建立活动记录关联_Ruby On Rails_Activerecord_Associations - Fatal编程技术网

Ruby on rails 如何将多个类别和子类别与产品/广告建立活动记录关联

Ruby on rails 如何将多个类别和子类别与产品/广告建立活动记录关联,ruby-on-rails,activerecord,associations,Ruby On Rails,Activerecord,Associations,我试图理解分类广告的模型设计。假设我有一些分类和子分类,如下所示 Electronics(Main category) -Mobile --Company ---Model -TV --Company ---Model Property(Main category) -Car(Sub category) --Brand(Sub Sub category) ---Speed Range(Sub Sub Sub category) 我有一个广告模特 我如何才能使之间的关系类别,所有子类别和广告。到

我试图理解分类广告的模型设计。假设我有一些分类和子分类,如下所示

Electronics(Main category)
-Mobile
--Company
---Model
-TV
--Company
---Model
Property(Main category)
-Car(Sub category)
--Brand(Sub Sub category)
---Speed Range(Sub Sub Sub category)
我有一个广告模特

我如何才能使之间的关系类别,所有子类别和广告。到目前为止,我已经提出了以下设计

class MainCategoy < ActiveRecord::Base
  has_many :subcategory
end

class SubCategoy < ActiveRecord::Base
  has_many :subsubcategoy 
  belongs_to: maincategory
end

class SubSubCategoy < ActiveRecord::Base
  has_many :subsubsubcategory
  belongs_to: subcategory
end

class SubSubSubCategoy < ActiveRecord::Base
  belongs_to: subsubcategory
end

class Ads< ActiveRecord::Base

end
class MainCategoy
现在我的问题是(1)我对不同类别和子类别的关联是否正确?如果不是,请建议最好的设计


(2) 我不明白如何将广告与类别和子类别联系起来。类别不一定总是有子类别或子类别,但必须有子类别。我怎样才能做到这一点

您可以只使用一个自参考模型,例如:

class Category < ActiveRecord::Base
  has_many :child_categories, class_name: "Category", foreign_key: "parent_category_id"
  belongs_to :parent_category, class_name: "Category", foreign_key: "parent_category_id"
end
class Category < ActiveRecord::Base
  has_many :child_categories, class_name: "Category", foreign_key: "parent_category_id"
  belongs_to :parent_category, class_name: "Category", foreign_key: "parent_category_id"

  has_many :ads
end

class Ads < ActiveRecord::Base
  belongs_to :category
end
对于广告模式:

class Ads < ActiveRecord::Base
  has_and_belongs_to_many :categories
end
classads
另请参见有关如何设置迁移的信息

由于一个广告只能属于一个类别,您可以设置如下关联:

class Category < ActiveRecord::Base
  has_many :child_categories, class_name: "Category", foreign_key: "parent_category_id"
  belongs_to :parent_category, class_name: "Category", foreign_key: "parent_category_id"
end
class Category < ActiveRecord::Base
  has_many :child_categories, class_name: "Category", foreign_key: "parent_category_id"
  belongs_to :parent_category, class_name: "Category", foreign_key: "parent_category_id"

  has_many :ads
end

class Ads < ActiveRecord::Base
  belongs_to :category
end
类别

您还应该阅读我前面链接的rails association basics指南。它包含所有相关信息,将帮助您轻松设置模型和关联。

首先,对于您可以使用的树结构数据或其他数据。在那里,您可以使用数据结构做许多漂亮的事情,例如(通过对DB的单个查询):

对于广告,我会使用联想:

class Ads< ActiveRecord::Base
  has_and_belongs_to_many :categories
end

为同一模型设置父子关系

ad:类别的父id

class Category < ActiveRecord::Base
  belongs_to :parent, class: Category
  has_many :subcategories, class: Category, foreign_key: :parent_id
  has_many :subsubcategories, class: Category, through: :subcategories, source: :subcategories

  has_many :ads

end
类别
一个广告只能属于一个类别或子类别。。。我应该仍然使用has_和_belies_to_many吗?不。在这种情况下,您可以在ads表中使用category_id。我会更新答案。
class Category < ActiveRecord::Base
  belongs_to :parent, class: Category
  has_many :subcategories, class: Category, foreign_key: :parent_id
  has_many :subsubcategories, class: Category, through: :subcategories, source: :subcategories

  has_many :ads

end