Получить данные из другой таблицы, используя внешний ключ в файле представления рельсов - PullRequest
0 голосов
/ 26 мая 2018

Я создаю новый файл .html.erb, в котором я пытаюсь составить список всех команд и их противников.У меня есть 2 таблицы: таблица пользователей (команды) и таблица рекордов.В таблице записей есть 2 столбца (user_id, opptor_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.Однако я не могу сделать то же самое с командой соперника.Я пытался использовать

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

, но это не сработало.Как я могу заменить оппонент_пользователя_для фактического имени?

Дополнительная информация ниже

Контроллер

  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 голосов
/ 26 мая 2018
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 %>
...