使用 rails 视图文件中的外键从不同的 table 获取数据
Get data from different table using a foreign key in a rails view file
我正在创建一个新的 .html.erb 文件,我试图在其中列出所有球队及其对手。我有 2 tables:一个用户(团队)table 和一个记录 table。记录 table 有 2 列 (user_id, opponent_user_id) 引用相同的用户 table.
我的查看文件:
<% @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
Table 架构
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
感谢您的帮助。我还是 rails 的新手。对于我不应该以这种方式做的事情的任何额外反馈同样会受到赞赏。
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 %>
我正在创建一个新的 .html.erb 文件,我试图在其中列出所有球队及其对手。我有 2 tables:一个用户(团队)table 和一个记录 table。记录 table 有 2 列 (user_id, opponent_user_id) 引用相同的用户 table.
我的查看文件:
<% @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
Table 架构
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
感谢您的帮助。我还是 rails 的新手。对于我不应该以这种方式做的事情的任何额外反馈同样会受到赞赏。
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 %>