Соединение таблицы RoR с «где» необходимо на обеих таблицах - PullRequest
2 голосов
/ 13 июля 2011

У меня проблемы с тем, чтобы обернуться вокруг присоединения к столам.У меня есть отношения one_to_many между местоположениями и списками.Местоположения имеют долготу и широту, а также ее первичный ключ: почтовый индекс.В листингах есть заголовок и почтовый индекс.

Listing.where("title LIKE ?", "%#{params[:search2]}%")
Location.where(:lat => @min_lat..@max_lat, :lon => @min_lon..@max_lon)

Я бы хотел объединить эти два оператора, чтобы получить все листинги в пределах определенного диапазона почтового индекса, который определяется с помощью диапазона долготи широты.Я не могу понять, как сделать это в Ruby on Rails таким образом, чтобы мне не приходилось делать отдельные операции поиска SQL и проходить через данные в моем коде, чтобы найти правильные данные.

Редактировать Обновленокод:

@results=Location.joins(:listings).where(:listings => ["title LIKE ?", "%#{params[:search2]}%"], :locations => {:zipcode => params[:searchZip]})

Вывод SQL: SELECT "locations".* FROM "locations" INNER JOIN "listings" ON "listings"."location_id" = "locations"."zipcode" WHERE ("locations"."listings" IN ('title LIKE ?', '%fish%')) AND ("locations"."zipcode" = 44012)

Я не знаю, почему он делает "местоположения". "списки" (что дает ошибку) или где INидет от.

Ответы [ 3 ]

2 голосов
/ 13 июля 2011

Я предлагаю использовать ARel вместо написания собственного SQL:

Listing.joins(:location).
  where(:listings => {:lat => @min_lat..@max_lat, :lon => @min_lon..@max_lon},
        :location => ["title LIKE ?", "%#{params[:search2]}%"])
1 голос
/ 13 июля 2011

Если я правильно понимаю, что Location has_many :listings, то этот запрос вернет все списки в диапазоне местоположений с соответствующими названиями:

Listing.joins(:location).where(
  'listings.title LIKE ? AND 
   locations.lat BETWEEN ? AND ? AND 
   locations.lon BETWEEN ? AND ?', 
"%#{params[:search2]}%", @min_lat, @max_lat, @min_lon, @max_lon)
0 голосов
/ 13 июля 2011
   Location.joins(:listings).where(:listings => {:lat => @min_lat..@max_lat, :lon => @min_lon..@max_lon} )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...