ассоциация rails

#ruby-on-rails

#ruby-on-rails

Вопрос:

У меня есть следующие таблицы:

создание файлов таблиц (идентификатор int auto_increment имя первичного ключа varchar(255))

создание таблицы пользователей (идентификатор int auto_increment имя первичного ключа varchar(255))

создайте администраторов таблицы (file_id int user_id int)

Я хотел бы иметь возможность получить имена пользователей администратора файла. Как мне создать ассоциацию, чтобы получить эту

Если я использую has_many :admins для файлов, то я могу использовать file.admins для получения идентификаторов и получения имен пользователей этих администраторов, мне пришлось бы выполнять подзапросы с использованием Find . Я хотел бы избежать этого

Ответ №1:

Для вопросов Rails, вместо того, чтобы делиться синтаксисом создания таблицы базы данных, вы должны поделиться своими миграциями базы данных (просто откройте schema.rb и скопируйте / вставьте).

Похоже, у вас просто есть пользователи, некоторые из которых имеют права администратора. Самый простой способ сделать это — просто иметь t.boolean :admin, :default => false столбец в вашей пользовательской модели.

Приятным преимуществом этого подхода является то, что Active Record предоставит вам User#admin? метод, который легко читается в условных выражениях и тому подобном (т. Е. <%= render 'admin_menu' if @user.admin? %> ).

Это также устраняет ваши опасения по поводу дополнительных запросов для получения имен пользователей после получения перечисленных администраторов.

 # app/models/file.rb
class File < ActiveRecord::Base
  belongs_to :user
end

@files = File.where(:something => true).include(:user)
@files.map(amp;:name) #=> ['Bob', 'Cindy', ...]
  

Комментарии:

1. На самом деле, добавление флага администратора в таблицу пользователей у меня не работает. У меня много файлов, и у каждого файла могут быть разные администраторы. Вот почему у меня есть таблица администратора, которая связывает file_id с user_id.