2011-12-26 2 views
0

У меня такие ассоциации:: где с ассоциациями

class User < ActiveRecord::Base 
    has_one :position 
end 

Class Position < ActiveRecord::Base 
    belongs_to :user 
end 

И я хочу, чтобы пользователи с позиций. Я попытался установить

User.where(:position != nil) 

но это не работает, потому что в таблице пользователей нет position_id fileld.

Как я могу получить пользователей с позициями?

+0

Я нашел ответ, объем должен выглядеть «рамки: has_position, лямбда { присоединяется (: положение). где ("position.user_id IS NOT?", Nil) } ' – Sandvich

+1

Кстати, ': position! = Nil' никогда не будет делать то, что вы хотите в Ruby, потому что это выражение просто оценивается как true, потому что символ" position " не равно рубину «ноль». Ваш код был эквивалентен 'Users.where (true)'. –

+0

@DavidGrayson хорошее уведомление, я также прочитал его в Rails 3-way book, и ответ на вопрос был там тоже – Sandvich

ответ

1

User.includes (позиция): .гд ("positions.id IS NOT NULL")

0

Изменение схемы.

class User < ActiveRecord::Base 
    belongs_to :position 
end 

class Position < ActiveRecord::Base 
    has_one :user 
end 

Таким образом users таблица будет содержать position_id, и вы будете в состоянии сделать User.where(:position_id => nil)

+0

извините, но мне нужны именно ассоциации, что было написано выше – Sandvich

+0

Вам нужно 'user_id' находиться в таблице' position'? Нет проблем, используйте другой ответ :-) –

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