Условие смешивания ActiveRecord + лучший способ написать это - PullRequest
1 голос
/ 29 сентября 2010

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

У меня есть условие, которое предыдущий взгляд очень чистый и легкий для понимания как

Account.first.websites.last.users.find(:all,
             :conditions => {:country => "XYZ",:status => "Single",:admin => nil)

Теперь большая проблема в том, что пользователь с admin = false не поднят.

Т.е. я хочу, чтобы все пользователи из определенной страны имели статус «Single» и admin имеет значение «nil» (Null в базе данных) или «false».

Мне удается получить нужный код, но, похоже, я не доволен ясностью об этом.

Account.first.websites.last.users.find(:all,
    :conditions => ["country = ? AND status = ? AND admin IS NULL OR 
       admin = ?","XYZ","Single","false"])

Любая помощь будет оценена.

спасибо

Ответы [ 2 ]

1 голос
/ 29 сентября 2010

Я бы добавил несколько областей к модели:

scope :not_admin, where("admin is null or admin = ?", false)
scope :single, where("status = ?", "single")
scope :from_country, lambda {|country| where("country = ?", country}

, затем использовал бы ее в контроллерах:

Account.first.websites.last.users.from_country("XYZ").single.not_admin

Вы также можете использовать автоматически созданные области:

Account.first.websites.last.users.scoped_by_country("XYZ").scoped_by_status("single").not_admin

Здесь я оставил только not_admin область.

1 голос
/ 29 сентября 2010

Попробуйте следующее:

Account.first.websites.last.users.all(:conditions => ["country = ? AND status = ? AND admin != true","XYZ","Single"])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...