Я новичок в рельсах и пытаюсь выполнить поиск по таблице с рельсами, и я просто использую для этого свои знания 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
РЕДАКТИРОВАТЬ
user.rb
has_many :containers
has_many :user_places
has_many :places, through: :user_places
has_many :labels
место.рб
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и, возможно, я мог бы где-то здесь использовать команду exclude... но эта модель отношений кажется немного сложной для того, чтобы сделать это с ActiveRecord... как я могу? Я действительно думаю, что мне следует использовать ActiveRecord, но как?
Спасибо