代码之家  ›  专栏  ›  技术社区  ›  Designer

Rails 5+PostgreSQL多字段表引用关系

  •  0
  • Designer  · 技术社区  · 7 年前

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

      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 %>
    

    不过,在posts表中,我还提交了“按用户标识”字段,该字段存储的用户与用户标识不同。

    那么我如何通过ID获取提交的用户名? 我需要单独的关系吗?

    谢谢您!

    2 回复  |  直到 7 年前
        1
  •  3
  •   praga2050    7 年前

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

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

    optional: true 不会导致验证错误 submitted_by_user 存在

    所以在用户界面中,你可以像

    <%= post.submitted_by_user.username %>
    

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

        2
  •  1
  •   Alex.U    7 年前

    我同意@praga2050的回答,但这里有一个固执己见的选择。

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

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

    推荐文章