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

questionAnswers(2)

yourAnswerToTheQuestion