我有以下型號:Rails 3的多個型號查詢
class Location < ActiveRecord::Base
has_many :location_items
has_many :items, :through=>:location_items
end
class Item < ActiveRecord::Base
has_many :location_items
has_many :locations, :through=>:location_items
end
class LocationItem < ActiveRecord::Base
belongs_to :item
belongs_to :location
end
另外我有一個完整的文本搜索(由創業板)啓用的項目模型,我可以做 Item.search(「關鍵字」) - 'search'是由gem提供的範圍,用於獲取所有具有名稱或說明匹配關鍵字的項目,結果項目添加了'rank'屬性以用於匹配的相關性
我還有Geo搜索(來自gem)啓用位置模型,我可以做 Location.near('Toronto。ON',100)---'near'是由寶石提供的範圍,用於獲取距離Tor 100公里內的所有位置結果位置添加距離給定位置的距離'距離'屬性 - 多倫多在這個例子中
所以現在我想要做的是獲得位置匹配某個給定位置的location_item對象的列表和項目匹配給定的關鍵字。 例如,搜索匹配「關鍵字」且位於多倫多100公里範圍內的location_item對象。
我該如何做到這一點一查詢?並且還可以通過location_item對象內的相關項目和位置訪問距離和等級屬性。
我似乎無法對鏈,他們只對項目和地點工作的範圍,不LocationItem,
例如,下面的表達式將無法正常工作
LocationItem.joins(:項目, (''關鍵字')。near('Toronto,ON',100)
希望我對我所做的事情的描述很有意義。你有什麼主意嗎?非常感謝你!
感謝蒂姆的回覆,示例代碼和你的時間。這正是我正在尋找的。在我嘗試之後,發現似乎我需要在連接'INNER JOIN'後添加以使查詢工作。例如:LocationItem.joins(「INNER JOIN(#{Item.search(keyword).to_sql}) as matching_items on matching_items.id = location_items.item_id」) – gifkins 2011-06-01 02:33:37
哦,謝謝,我已經忘記了那部分。答案現在已更新。樂意效勞。 – 2011-06-01 20:57:38