Rails, поиск объекта с несколькими датами в has_many Assocation
-
10-10-2019 - |
Вопрос
Я довольно новичок в рельсах, и проблема, с которой я сталкиваюсь, описывается следующим образом:
Во -первых, есть стол с домами. Дома имеют несколько дат, связанные с Has_Many: даты
Во -вторых, есть стол с датами. Даты имеют ассоциацию принадлежности: Дом
Теперь в поиске пользователь может выбрать начало и конечную дату. И то, что я хочу сделать, это поиск в каждом доме на предмет его дат, и проверяйте, находятся ли они между началом и конечной датой. Если один или несколько дат находятся в дату начала/окончания, его необходимо найти.
Это мои условия для поиска дома по другим критериям:
parameters.push( [ params[:house_category_id], "houses.house_category_id = ?" ] );
parameters.push( [ params[:province_id], "houses.province_id = ?" ] );
Я создал метод создания допустимых условий с этими параметрами.
Пожалуйста, скажите мне, если это не достаточно ясно, потому что это немного сложно объяснить.
Я пытался искать это, но это привело меня на все другие страницы, кроме страниц с ответом.
Спасибо
Решение
Не уверен, правильно ли я понимаю вашу проблему, но в соответствии с тем, что я понял, вы можете получить желаемый результат, используя следующее:
res = House.find(:all, :select => 'distinct houses.*', :joins => "INNER JOIN dates ON dates.house_id = houses.id", :conditions => "dates.date < '2011-01-12' AND dates.date > '2011-01-11'")
где «2011-01-12» и «2011-01-11» являются датами, выбранными пользователем.
Дайте мне знать, если это то, что вы искали или публикуете с более подробной информацией.
Другие советы
Теперь еще один вопрос появляется в моей голове, но я не знаю, возможно ли это ... если вы забудете об этой ситуации, есть ли возможность, что я могу проверить такие ассоциации, как так:
В доме есть 2 даты.
Пользователь выбирает 2 даты.
Теперь я хочу выбрать дом только в том случае, если эти 2 даты соответствуют.
Как это:
@houses = House.find(:all, :select => 'distinct houses.*', :joins => "INNER JOIN dates ON dates.house_id = houses.id", :conditions => "dates.date = '2011-01-12' AND dates.date = '2011-01-11'")
Я попробовал код выше и получил SQL, как это:
SELECT distinct houses.* FROM `houses` INNER JOIN dates ON dates.house_id = houses.id WHERE (dates.date = '2011-01-15' AND dates.date = '2011-01-22')
Но, похоже, это не работает, возможно ли это вообще в одном запросе или в одиночной находке ()?