Нужно вернуть всех пользователей с жанром «Акустика» - PullRequest
1 голос
/ 13 ноября 2010

Есть ли лучший способ написать это:

User.where (: genre_id => Genre.where (: name => 'Acoustic'). First.id) .first.first_name

Я пытаюсь вернуть всех пользователей с жанром "Акустика".

Выше будет работать, если есть пользователи с настройкой Акустика. Но если я сделаю:

User.where (: genre_id => Genre.where (: name => 'Pop'). First.id) .first.first_name

Я получу ошибку, так как нет пользователей, связанных с поп жанр ...

Какие-нибудь предложения, чтобы заставить это работать?

Ответы [ 3 ]

2 голосов
/ 13 ноября 2010

В общем, отношения «многие ко многим» действительно отстой в монго (цена, которую вы платите за то, что has_one / has_many такие классные)

Я предполагаю, что проблема в том, что Genre.where(:name => 'Pop').first возвращает ноль? Я бы сделал это

User.where(:genre_id => g).first.first_name if g = Genre.where(:name => 'Pop').first.try(:id)

или если массивные однострочные выражения вам не подходят

g = Genre.where(:name => 'Pop').first.try(:id)
if g
  User.where(:genre_id => g).first.first_name 
end
0 голосов
/ 13 ноября 2010

Вы можете попробовать найти вместо жанра где:

User.where(:genre_id => Genre.find(:first, :conditions => { :name => 'Pop' }))

Это должно работать, даже если Genre.find возвращает ноль.

0 голосов
/ 13 ноября 2010

Не работает ли обычный вложенный where?

User.where(:genre => { :name => 'Pop' })
...