Как добавить условные где пункты в рельсах
Я новичок в rails и пытаюсь выполнить поиск по таблице с помощью rails, и я просто использую свои знания sql для этого. Но это просто не похоже на рельсы или даже рубин ...
Есть ли лучший способ сделать то, что я делаю ниже? (в основном, только передавайте аргументы даты в sql, если они заполнены)
def search(begin_date=nil, end_date=nil)
subject = " and created_at "
if !(begin_date.nil? || end_date.nil?)
where_part = subject + "BETWEEN :begin_date AND :end_date"
else if (begin_date.nil? && end_date.nil?)
where_part = ""
else if(begin_date.nil?)
where_part = subject + " <= :end_date"
else if (end_date.nil?)
where_part = subject + " >= :begin_date"
end
end
end
end
User.joins(places: {containers: {label: :user}}).where("users.id= :user_id "+where_part, user_id: self.id, begin_date:begin_date, end_date:end_date).group(...).select(...)
end
EDIT
user.rb
has_many :containers
has_many :user_places
has_many :places, through: :user_places
has_many :labels
place.rb
has_many :containers
has_many :user_places
has_many :users, through: :user_places
container.rb
belongs_to :label
belongs_to :place
belongs_to :user
label.rb
belongs_to :user
has_many :containers
По сути, я хочу получить счетчик количества контейнеров в ярлыках данного пользователя или с прямыми отношениями для каждого местоположения и хочу иметь возможность фильтровать его по датам начала и окончания.
Любая из этих дат может быть нулевой, и поэтому мне нужно будет указать это в моем «запросе».
Мой вопрос: как я могу сделать это путь рельсов? Я посмотрел наhttp://guides.rubyonrails.org/active_record_querying.html и, возможно, я мог бы использовать где-нибудь здесь команду exc ... но эта модель отношений кажется немного сложной, чтобы сделать это с ActiveRecord ... как я могу ?, я действительно думаю, что я должен использовать ActiveRecord, но как?
Спасибо