Доступ к атрибутам таблицы Rails 4 из ассоциации has_one

у меня есть две модели пользователя и аккаунта, где

class User < ActiveRecord::Base
  has_one :account
end

 class Account < ActiveRecord::Base
      belongs_to :User
    end

в моем контроллере пользователей я получаю пользователей

@user = User.list('', false,'company', 'asc')

где "список" - это метод, описанный в моей модели для извлечения записей

в таблице пользователей у меня есть два столбца «id» и «company_name», а в таблице учетных записей у меня есть столбцы «user_id» и «country»

теперь я хочу, чтобы массив @user извлекал название компании и их страну, которые можно найти по user_id в таблице учетных записей.

пожалуйста, скажите мне, как я могу это сделать, спасибо заранее


person user4965201    schedule 19.08.2015    source источник
comment
Как должны выглядеть выходные данные, которые вы хотите?   -  person chumakoff    schedule 19.08.2015
comment
что когда я пишу User.each do|f| f.company_name f.country заканчивается, поэтому должно быть название компании с указанием страны   -  person user4965201    schedule 19.08.2015
comment
Вы хотите зациклить только свой массив @user или я могу предложить другое решение, как получить пользователей?   -  person chumakoff    schedule 19.08.2015


Ответы (2)


Как насчет:

# app/models/user.rb
class User < ActiveRecord::Base
  has_one :account

  scope :with_account_info, -> { includes(:account) }
  default_scope{with_account_info}
end

Если хотите, последние две строки можно объединить в одну, например:

default_scope{ includes(:account) } 

ХТН

person Dan Laffan    schedule 19.08.2015
comment
запрос останется прежним? - person user4965201; 19.08.2015
comment
@Anatoly Иногда отладка с помощью default_scope превращается в кошмар .. :) Лучше использовать именованную область. - person Arup Rakshit; 19.08.2015
comment
@Анатолий да, согласен. - person Arup Rakshit; 19.08.2015

В вашем контроллере

@users = User.joins(:account)

на ваш взгляд

@users.each do |user|
  user.company_name
  user.account.country
end
person Sajjad Murtaza    schedule 19.08.2015