0
class User 
has_one :settings 

class Settings 
belongs_to :user 

Я хочу сделать что-то вроденайти экземпляр модели, без отношения в Rails

@user_with_no_settings = User.where(:settings => nil) 

Но это возвращает пустое отношение.

Как найти всех пользователей, у которых нет связанных с ними настроек? (Так что я найду их и создаст их)

ответ

3

Самое важное, что ваша ассоциация неверна;

Изменить его:

class User 
has_one :setting 

class Settings 
belongs_to :user 

Имя класса множественного числа, но ассоциация has_one всегда вырождена. Таким образом, вы не можете использовать :settings для has_one в качестве противопоставления has_many, который всегда является множественным.

Используйте это:

User.where("id not in (select user_id from settings)") 

Этот запрос дает всем пользователям, которые не имеют параметров, связанных с ними.

+0

Почему? имя модели - «Настройки», а не «Настройка» –

+0

. См. http://guides.rubyonrails.org/association_basics.html. Существует раздел: 'has_one Association' –

+0

ok, но как мне найти всех пользователей без настроек? –

0

Хорошо. В вашей ситуации вам может понадобиться TRY этот код.

User.where('id NOT IN (?)', User.joins(:settings).pluck('settings.user_id')) 

Но вам необходимо следовать Конвенции о рельсах.

Измените настройки на настройку.