Jak dodać warunkowe klauzule gdzie w szynach
Jestem nowicjuszem na railsach i próbuję przeprowadzić wyszukiwanie w tabeli z szynami i właśnie używam mojej wiedzy sql, aby to zrobić. Ale to po prostu nie wygląda na szyny ani ruby ...
Czy jest jakiś lepszy sposób na zrobienie tego, co robię poniżej? (w zasadzie tylko przekazuj argumenty daty do sql, jeśli są wypełnione)
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
EDYTOWAĆ
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
Zasadniczo chcę uzyskać liczbę kontenerów w etykietach danego użytkownika lub z bezpośrednią relacją na lokalizację, i chcę mieć możliwość filtrowania go według dat rozpoczęcia i zakończenia.
Każda z tych dat może być zerowa, więc musiałbym zająć się tym w moim „zapytaniu”.
Moje pytanie brzmi: jak mogę to zrobić na szynach? Przyjrzałem sięhttp://guides.rubyonrails.org/active_record_querying.html i może gdzieś mógłbym użyć polecenia except ... ale ten model relacji wydaje się nieco skomplikowany w ActiveRecord ... jak mogę ?, naprawdę myślę, że powinienem używać ActiveRecord, ale jak?
Dziękuję Ci