我是 rails 的新手,我需要一些帮助来构建 rails 模型。 我有四个模型 User、Product、UserSavedProduct、likedProduct。
用户可以通过usersavedproducts和liked products拥有很多产品,这些是我的模型。这是写它们的正确方法吗?如果是这样如何获得所有保存的产品,单个用户喜欢的产品,否则你能给我指明正确的方向吗。
class User < ActiveRecord::Base
has_many :user_saved_products
has_many :saved_products,:through => :user_saved_products,:source => :products
has_many :product_likes
has_many :products,:through => :product_likes
End
class UserSavedProduct < ActiveRecord::Base
belongs_to :user
belongs_to :product
end
class ProductLike < ActiveRecord::Base
belongs_to :user
belongs_to :product
end
class Product < ActiveRecord::Base
belongs_to :user
has_many :user_saved_products
has_many :users, :through => :user_saved_products
has_many :product_likes
has_many :users,:through => :product_likes
end
当我执行 User.first.methods.grep(/product/) 时
=> [:autosave_associated_records_for_user_saved_products, :validate_associated_records_for_user_saved_products, :before_add_for_user_saved_products, :before_add_for_user_saved_products?, :before_add_for_user_saved_products=, :after_add_for_user_saved_products, :after_add_for_user_saved_products?, :after_add_for_user_saved_products=, :before_remove_for_user_saved_products, :before_remove_for_user_saved_products?, :before_remove_for_user_saved_products=, :after_remove_for_user_saved_products, :after_remove_for_user_saved_products ?, :after_remove_for_user_saved_products=, :autosave_associated_records_for_saved_products, :validate_associated_records_for_saved_products, :before_add_for_saved_products, :before_add_for_saved_products?, :before_add_for_saved_products=, :after_add_for_saved_products, :after_add_for_saved_products?, :after_add_for_saved_products=, :before_remove_for_saved_products, :before_remove_for_saved_products?, :before_remove_for_saved_products=, :after_remove_for_saved _products, :after_remove_for_saved_products?, :after_remove_for_saved_products=, :autosave_associated_records_for_product_likes, :validate_associated_records_for_product_likes, :before_add_for_product_likes, :before_add_for_product_likes?, :before_add_for_product_likes=, :after_add_for_product_likes, :after_add_for_product_likes?, :after_add_for_product_likes=, :before_remove_for_product_likes, :before_remove_for_product_likes?, :before_remove_for_product_likes=, : after_remove_for_product_likes, :after_remove_for_product_likes?, :after_remove_for_product_likes=, :autosave_associated_records_for_liked_products, :validate_associated_records_for_liked_products, :before_add_for_liked_products, :before_add_for_liked_products?, :before_add_for_liked_products=, :after_add_for_liked_products, :after_add_for_liked_products?, :after_add_for_liked_products=, :before_remove_for_liked_products, :before_remove_for_liked_products?, :before_remove_for_liked_products=, : after_remove_for_liked_products, :after_remove_for_liked_products?, :after_remove_for_liked_products=, :user_saved_products, :user_saved_product_ids, :user_saved_products=, :user_saved_product_ids=, :saved_products, :saved_product_ids, :saved_products=, :saved_product_ids=, :product_likes, :product_like_ids, :product_likes=, :product_like_ids=, :liked_products, :liked_product_ids, :liked_products=, :liked_product_ids=]
最佳答案
您遇到的主要问题是您的 Product 模型 - 您有多个 :users
关联。我会这样设置。
我必须从产品中选择两个关联名称返回给用户。我选择了liking_users
和saving_users
,如果不喜欢可以重命名。
如果我这样做,我会将 ProductLike 类重命名为“UserLikedProduct”,使其与“UserSavedProduct”一致。显然,如果您这样做,您将需要更改数据库表名和引用该表的关联。
class User < ActiveRecord::Base
has_many :user_saved_products
has_many :saved_products, :through => :user_saved_products, :class_name => "Product"
has_many :product_likes
has_many :liked_products,:through => :product_likes, :class_name => "Product"
end
class Product < ActiveRecord::Base
has_many :user_saved_products
has_many :saving_users, :through => :user_saved_products, :class_name => "User"
has_many :product_likes
has_many :liking_users, :through => :product_likes, :class_name => "User"
end
class UserSavedProduct < ActiveRecord::Base
belongs_to :user
belongs_to :product
end
class ProductLike < ActiveRecord::Base
belongs_to :user
belongs_to :product
end
关于mysql - Rails 多个 has_many 通过不同的模型到单个模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26798531/