Ruby on Rails使用自定义id作为连接表

时间:2017-05-05 07:59:41

标签: ruby-on-rails postgresql

我试图让联接表在模式中使用自定义ID。我希望能够使用联接表上的custom_id作为recipient_id

,通过联接表获取用户的所有相关帖子

这是我目前的设置:

class User > ActiveRecord::Base
  has_many :user_posts
  has_many :received_posts, through: :user_posts, source: :recipient
end

class UserPost < ActiveRecord::Base
  belongs_to :recipient, class_name: "User"
  belongs_to :post
end

class Post < ActiveRecord::Base
  has_many :user_posts
  has_many :recipients, through: :user_posts, source: :recipient
end

这是我的联接表的架构:

UserPost
recipient_id: integer
post_id: integer

我得到的错误是:

PG::UndefinedColumn: ERROR:  column user_posts.user_id does not exist

我尝试过像上面那样添加来源,但无济于事。这让我觉得它在联接表上寻找user_id而不是recipient_id。我不确定如何正确指定自定义ID作为要使用的字段。我在这里试过外键和其他答案,但没有运气。可能是我实现外键或源错误。

非常感谢任何帮助,谢谢。

1 个答案:

答案 0 :(得分:1)

在用户模型中,将foreigh_key添加到:user_posts

class User > ActiveRecord::Base
  has_many :user_posts, foreign_key: :recipient_id
  has_many :received_posts, through: :user_posts, source: :recipient
end