【问题标题】:Rails 5 + postgresql table reference relation for multiple fieldsRails 5 + postgresql 多个字段的表引用关系
【发布时间】:2018-07-28 09:58:42
【问题描述】:

我有如下的帖子和用户表和关系

  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"
    ...

现在我可以获取用户名,如下所示

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

但是在帖子表中,我也有 submit_by_id 字段,它存储与 user_id 不同的用户

那么如何获取 submit_by_id 的用户名呢? 我需要一个单独的关系吗?

谢谢!

【问题讨论】:

    标签: ruby-on-rails postgresql reference ruby-on-rails-5 table-relationships


    【解决方案1】:

    您需要在 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

    【讨论】:

    • 酷!现在一切都说得通了:D 谢谢
    【解决方案2】:

    我同意@praga2050 的回答,但这是一个固执己见的替代方案。

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

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

    【讨论】:

    • 我喜欢这个解决方案多么简单!我经常在很多地方都需要这样的解决方案!谢谢!
    猜你喜欢
    • 1970-01-01
    • 2013-01-18
    • 2011-04-09
    • 2021-07-13
    • 1970-01-01
    • 2023-03-25
    • 2016-12-20
    • 2021-06-09
    • 2019-03-02
    相关资源
    最近更新 更多