2015-08-20 2 views
0

У меня проблема с методом includes в Rails. У меня есть эта пользователя модель:Rails 4 issue in включает и извлекает связанные элементы

class User < ActiveRecord::Base 
    has_one :account 
end 

И эту модель счета:

class Account < ActiveRecord::Base 
     belongs_to :User 
    end 

Теперь модель пользователя имеет :id и :names и модель счета имеет :user_id и :country

В другом контроллере Я хочу получить и отобразить все имена пользователей со своими странами.

Я использую этот запрос

@users = User.includes(:account).where(some condition) 

Пожалуйста, скажите мне, что я могу добавить в запрос, чтобы извлечь все страны, связанные с именами пользователей? Заранее спасибо

+0

'@users = User.includes (: account)', а затем '@names = @ users.collect (&: name)' – Athar

+0

Я хочу показать его вот так: @ user.each do | f | f.names f.account.country end – user4965201

ответ

2

Пользователь должен иметь множественное число в контроллере, когда вы получаете список записей. например

@users = User.includes(:account) 

Вы можете это сделать.

<% @users.each do |user| %> 
    <%= user.names %> 
    <%= user.account.country %> 
<% end %> 

Как names это атрибут пользователя, вы можете получить непосредственно, в то время как страна account's атрибут, вы можете получить с помощью user.account.country

+0

Я получаю неопределенный метод «учетная запись» – user4965201

+0

вы можете поделиться точной ошибкой. вы можете получать учетную запись для любого пользователя. и у всех пользователей есть учетная запись.? – Athar

+0

NoMethodError (undefined method 'account 'для # ): yes У всех пользователей есть учетная запись – user4965201

1

Если это дает ошибку как NoMethodError (неопределенный метод `счет» для #) , то это означает, что вы преобразовываете его в массив в самом контроллере.

Изменить код например:

@users = User.includes(:account).where('id < 5') 

А Посмотреть

<% @users.each do |user| %> 
    <%= user.name %> 
    <%= user.account.country %> 
<% end %> 
+0

что произойдет, если какая-либо запись для поля страны равна нулю ... будет ли она еще получать дальнейшую запись? – user4965201

+0

if country nil then no prob, но если учетная запись не связана, тогда она выкинет ошибку –

+1

, если учетная запись не существует - user.account.country, если пользователь.account.nil? OR user.account.nil? ? 'NA': user.account.country.nil? ? 'NA': user.account.country –

0

Всякий раз, когда мы используем включает его по умолчанию делает присоединиться к наружной, так что будет может быть пользователи, которые не имеют любая учетная запись, и вы получите ошибку при попытке получить доступ к user.account.country как user.account равно нулю, а на объекте nil он попытается вызвать метод страны, который не существует.

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