Rails显示来自多个模型和表的记录

时间:2018-04-20 05:07:00

标签: ruby-on-rails

提前抱歉提出一个简单的问题。已经搜索了几个小时,但还没有解决问题。

我在用户控制器中定义了2个变量

class UsersController < ApplicationController
  def show
    @user = User.find(params[:id])
    @record = Record.joins(:user).where(:user_id => 2).select('records.id, records.wins')
  end
 end

在我的.html.erb文件中,我想显示该用户的胜利。代码如下:

 <%= @user.name %>
 <%= @record.wins %>

用户的名字显示没有问题,但是对于获胜,我得到“用户#的NoMethodError显示。未定义的方法`赢了'#

表模式如下所示:

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

create_table "users", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t|
t.string "name"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end

有人可以指出我正确的方向吗?

1 个答案:

答案 0 :(得分:0)

如果您的关联看起来像User has_many Record

然后是用户

#=> controller
@user = User.find(params[:id])
视图中的

<%= @user.name %>
#=> wins for this user
<% @user.records.each do |user_record| %>
    <% user_record.wins %>
<% end %>

你在控制器中不需要这一行

@record = Record.joins(:user).where(:user_id => 2).select('records.id, records.wins')