Ruby on rails rails有很多次通过同一目的地

Ruby on rails rails有很多次通过同一目的地,ruby-on-rails,activerecord,rspec,Ruby On Rails,Activerecord,Rspec,我有一个用户,帖子和喜欢的模型。一个用户有许多帖子,用户可以喜欢帖子 has_many :user_posts has_many :users, through: :user_posts has_many :likes has_many :users, through: :likes 另一方面,我的RSpec是: it { should have_many(:users).through(:user_posts) } it { should have_many(:use

我有一个用户,帖子和喜欢的模型。一个用户有许多帖子,用户可以喜欢帖子

  has_many :user_posts
  has_many :users, through: :user_posts
  has_many :likes
  has_many :users, through: :likes
另一方面,我的RSpec是:

  it { should have_many(:users).through(:user_posts) }
  it { should have_many(:user_posts) }
  it { should have_many(:likes) }
  it { should have_many(:user_likes).through(:likes) }
这似乎不是很好,因为rspec抱怨已经通过用户建立了关系:

 Expected Post to have a has_many association called users (, Expected users to have users through likes, but got it through user_posts)

我尝试了各种与class_name的组合,但没有多大成功。我应该如何定义这些关系?

我正在根据上面的代码进行一些推断。让我解释一下我所做的选择

你关于“用户帖子”的术语对我来说是模棱两可的,因为不清楚“用户帖子”是用户喜欢的还是用户编写的

在我的代码中,
有很多:posts
指的是作者身份,不需要连接表,因为post只有一个作者。另一方面,
有_many:liked_posts
需要通过:一个连接表(Likes),因为它是一个多对多关系

我唯一做的另一件不同的事情是在关联中使用
source:
选项。由于Like不知道
liked\u posts
喜欢的用户是什么,因此您需要告诉它要遵循哪些关联来获取记录

您可以在中阅读有关关联的更多信息

class用户

最后,作为对你所写问题的反馈:Tom在上面的评论中是正确的。目前还不清楚这些协会属于哪一类。一个用户有两次用户吗?令人困惑如果我错误地推断了您的任何业务规则,请告诉我,我可以修改我的想法。

一个用户不应该只有很多:帖子吗。为什么用户发布?您的问题/示例代码不是很清楚-所有这些关系都在同一个模型上吗?您的每个RSpec体验都与哪些型号相关?您的一个期望提到:用户_喜欢,但这不是您最初声明的关系。@LannyBose,您是对的。起初,我认为我可以处理用户和帖子之间的一种关系:用户拥有帖子,而用户喜欢一篇帖子。但这显然不起作用,因此我选择喜欢的模型。这确实意味着我可以消除多对多的关系,支持一个多对多
class User < ActiveRecord:Base
  has_many :posts
  has_many :likes
  has_many :liked_posts, through: :likes, source: :post
end

class Like < ActiveRecord:Base
  belongs_to :user
  belongs_to: post
end

class Post < ActiveRecord:Base
  has_many :likes
  has_many :users_who_liked, through: likes, source: :user
end