#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.