我正在创建一个新的.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
感谢您的帮助。我还是铁杆新手。对于我不应该以这种方式做的任何其他反馈同样应该受到赞赏。
答案 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 %>