我正在为uni开发一个Rails市场应用程序,可以根据用户的要求将用户与特定产品匹配。
用户可以列出具有特定类别的产品。
用户还可以列出请求,在其中可以指定他们要查找的产品及其类别。
目的是根据匹配类别将请求匹配到特定产品
这是我的模特
class Product < ApplicationRecord
belongs_to :user
has_many_attached :images, dependent: :destroy
has_many :product_categories
has_many :categories, through: :product_categories
validates :user_id, presence: true
end
class Category < ApplicationRecord
has_many :product_categories
has_many :products, through: :product_categories
validates :name, presence: true, length: { minimum: 3, maximum: 25}
validates_uniqueness_of :name
end
class ProductCategory < ApplicationRecord
belongs_to :product
belongs_to :category
end
class Request < ApplicationRecord
belongs_to :user
has_many_attached :images, dependent: :destroy
has_many :request_categories
has_many :categories, through: :request_categories
validates :user_id, presence: true
end
class RequestCategory < ApplicationRecord
belongs_to :request
belongs_to :category
end
我当时正在考虑创建一个名为Match的新模型,以将产品和类别组合在一起,还是在请求中匹配它更容易?
答案 0 :(得分:0)
在我看来,新的Match
类实际上是has_many :through
关联的联接表。假设您要实现一个异步工作程序(例如Sidekiq / ActiveJob)来进行“匹配”,则需要将匹配项连接到特定的Request
,并可能存储一些元数据(具有用户看到Match
了吗?他们拒绝了吗?)
因此,我可能会生成一个Match
这样的类:
rails g model Match seen_at:datetime deleted_at:datetime request:references product:references
并按如下所示设置关联:
class Match < ApplicationRecord
belongs_to :request
belongs_to :product
end
class Request < ApplicationRecord
belongs_to :user
has_many_attached :images, dependent: :destroy
has_many :request_categories
has_many :categories, through: :request_categories
has_many :matches
has_many :products, through: :matches
validates :user_id, presence: true
end
class Product < ApplicationRecord
belongs_to :user
has_many_attached :images, dependent: :destroy
has_many :product_categories
has_many :categories, through: :product_categories
has_many :matches
has_many :requests, through: :matches
validates :user_id, presence: true
end
此外,您可能希望将Request
has_many:through添加到您的Category
模型中(我认为您忘记了那个):
class Category < ApplicationRecord
has_many :product_categories
has_many :products, through: :product_categories
has_many :request_categories
has_many :requests, through: :request_categories
validates :name, presence: true, length: { minimum: 3, maximum: 25}
validates_uniqueness_of :name
end
这项工作的主要内容是研究如何让您的应用定期查找匹配项-您可能要从Active Job Basics文档开始。