Rails, поиск объекта с несколькими датами в has_many Assocation

StackOverflow https://stackoverflow.com/questions/4666640

Вопрос

Я довольно новичок в рельсах, и проблема, с которой я сталкиваюсь, описывается следующим образом:

Во -первых, есть стол с домами. Дома имеют несколько дат, связанные с 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')

Но, похоже, это не работает, возможно ли это вообще в одном запросе или в одиночной находке ()?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top