Rails 5 + postgresql table 多个字段的引用关系

Rails 5 + postgresql table reference relation for multiple fields

我有 post 和用户 table,关系如下

  create_table "posts", force: :cascade do |t|
    t.string "title"
    t.integer "submitted_by_id"
    t.integer "user_id"
    t.index ["user_id"], name: "index_posts_on_user_id"
    ...

现在我可以获得 post 的用户名,如下所示

<% @posts.each do |post| %>
    <%= post.user.username %>
<% end %>

但是在 post 中 table 我也有 submitted_by_id 字段存储与 user_id

不同的用户

那么我怎样才能得到submitted_by_id的用户名呢? 我需要一个单独的关系吗?

谢谢!

您需要在 Post 模型中添加关系,如下所示

belongs_to :submitted_by_user,
            class_name: 'User',
            primary_key: :id,
            foreign_key: 'submitted_by_id',
            optional: true    

optional: true 不会导致 submitted_by_user 存在

的验证错误

所以在 UI 你可以像

一样访问
<%= post.submitted_by_user.username %>

https://apidock.com/rails/ActiveRecord/Associations/ClassMethods/belongs_to

我同意@praga2050 的回答,但这里有一个自以为是的选择。

@posts.each {|post| User.find(post.submitted_by_id) }

如果您不想让您的关系稍微复杂一些,只需使用您已经可以访问的属性。