使用rails视图文件中的外键从不同的表中获取数据

时间:2018-05-26 18:03:30

标签: ruby-on-rails ruby-on-rails-4

我正在创建一个新的.html.erb文件,我试图列出所有团队及其对手。我有2个表:用户(团队)表和记录表。记录表有2列(user_id,opponent_user_id)引用相同的用户表。

我的观点文件:

   <% @record.each do |record| %>
     <tr>
       <td><%= record.user.name %></td>          
       <td><%= record.opponent_user_id %></td>
    </tr>
   <% end %>

我没有使用record.user_id,而是使用record.user.name将id替换为用户名。但是我无法对对手球队做同样的事情。我尝试使用

    <td><%= record.opponent_user_id.user.name %></td>

但那并没有奏效。如何用实际名称替换opponent_user_id?

下面的其他信息

控制器

  def prof
    @user = User.find(params[:id])
    @record = Record.where(user_id: @user.id)
  end

表架构

  create_table "users", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t|
    t.string "name"
    t.string "email"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.index ["email"], name: "index_users_on_email", unique: true
  end

  create_table "records", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t|
    t.bigint "user_id"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.integer "opponent_user_id"
    t.index ["user_id"], name: "index_records_on_user_id"
  end

感谢您的帮助。我还是铁杆新手。对于我不应该以这种方式做的任何其他反馈同样应该受到赞赏。

1 个答案:

答案 0 :(得分:0)

class Record < ActiveRecord::Base
  belongs_to :user, class_name: "User", foreign_key: "user_id"
  belongs_to :opponent_user, class_name: "User", foreign_key: "opponent_user_id"
end

在用户模型中: -

class User < ActiveRecord::Base
  has_many :records, class_name: "Record", foreign_key: "user_id"
  has_many :opponent_user_records, class_name: "Record", foreign_key: "opponent_user_id"
end

这里: -

  def prof
    @user = User.find(params[:id])
    @records = @user.records
  end

   <% @records.each do |record| %>
     <tr>
       <td><%= record.user.name %></td>          
       <td><%= record.opponent_user.name %></td>
    </tr>
   <% end %>