Rails关联越来越难以理解



我有点老了,但仍然是Rails的新手,在我的学习过程中,我已经陷入了一个点,我不知道如何在两个实体之间建立关联。

这是app的背景。有一个用户和广告实体。用户可以创建多个广告,一个广告属于一个用户,所以这是一个非常直接的一对多的关联。现在的困惑是,我想添加一个功能,用户可以添加广告到他的收藏夹。所以一个用户可以有多个fav_ads,一个广告有多个喜欢者。它也是直接的多对多关联,但在用户模型中已经有很多广告,所以如果我甚至用户通过fav_ads有很多广告,其中fav_ads是一个桥表,反之亦然,然后用户。广告会给我什么?我现在必须有一种方法来解决这种情况,因为它在web应用程序和数据库中很常见,但不知道如何在rails中实现。

需要一个连接表,其中一列用于user_id,一列用于ad_id。这个表可以命名为"user_ad_like"。

对于迁移,使用create_join_table(docs)

之类的
class UserAdLike < ActiveRecord::Migration[6.0]
def change
create_join_table(:users, :ads, table_name: "user_ad_like"
end
end

对于模型,使用has_and_belongs_to_many (docs)

class Ad
# Likes  (ad.likers)
has_and_belongs_to_many :likers, class_name: 'User', join_table: "user_ad_like"
# Creator (ad.user)
belongs_to :user
end
class User
# Liked ads (user.liked_ads)
has_and_belongs_to_many :liked_ads, class_name: 'Ad', join_table: "user_ad_like"
# Ads create (user.ads)
has_many :ads
end

然后是

  1. user.ads给你创建的广告
  2. user.liked_ads给你喜欢的广告
  3. ad.person,它给你的创造者
  4. ad.likers,其中给出了所有喜欢该广告的用户。

相关内容

  • 没有找到相关文章

最新更新