2017-01-03 4 views

ответ

1

Я думаю

@sources = @users.includes(:source).map(&:source).uniq 

является то, что вы хотите

+0

Спасибо, ваше решение работает для меня –

1

Вы должны принести соусы с объединением:

@sources = Source.includes(:users).where(users: {id: @users}) 

Если вам не нужно @users сбор отдельно, то вы можете запустить один запрос следующим образом:

@sources = Source.includes(:users).where(users: {u_company: 'IBM'}) 
+0

Могу ли я пользователь то же самое, если коллекция пользователей нравится эта '@users = User.where ('u_company = "IBM"')' –

+0

@ MarcoSong Пожалуйста, проверьте мои изменения в приведенном выше ответе. – dp7

+0

@MarcoSong Это работало для вас? – dp7

1

Обычным Rails путь структурирования этой ассоциации будет иметь столбец :source_id в модели User, чтобы вы могли получить связанные записи, например, следующим образом:

class User < ActiveRecord::Base 
    belongs_to :source 
end 

class Source < ActiveRecord::Base 
    has_many :users 
end 

@source = Source.find_by_name('IBM') # assumes that the IBM value is stored in the :name column 
# => #<Source id: 123, name: "IBM"> 

@users = @source.users 
# => [#<User id: 456, source_id: 123>, #<User id: 457, source_id: 123>] 
# or... 
@users = User.where(source_id: @source.id) 

Но если у вас нет настройки столбцов по умолчанию для сопоставления записей с идентификационными столбцами в базе данных, вам необходимо указать, какие столбцы использовать для вызова. Например:

class User < ActiveRecord::Base 
    belongs_to :source, primary_key: 'name', foreign_key: 'u_company' 
end 

class Source < ActiveRecord::Base 
    has_many :users, primary_key: 'name', foreign_key: 'u_company' 
end 

приведенный выше пример еще раз предполагает, что название источника хранится в :name колонке.

@source = Source.find_by_name('IBM') # assumes that the IBM value is stored in the :name column 
# => #<Source id: 123, name: "IBM"> 

@users = @source.users 
# => [#<User id: 456, u_company: "IBM">, #<User id: 457, u_company: "IBM">] 

Если вы хотите больше деталей, то вы должны дать более подробную информацию о том, как ваши данные структурированы и как связать их вместе.

Смежные вопросы