我有兩個ActiveRecord模型。 Idea
和User
。這兩者之間有一個聯繫,就像User.idea
一樣工作。在Rails中的反向關聯ActiveRecord
用戶模型當前保存用戶的座標lat
和lng
。
從想法控制器中,我想查詢與某個位置匹配的所有想法。我不是如何在Rails中進行反向連接查詢。
我有兩個ActiveRecord模型。 Idea
和User
。這兩者之間有一個聯繫,就像User.idea
一樣工作。在Rails中的反向關聯ActiveRecord
用戶模型當前保存用戶的座標lat
和lng
。
從想法控制器中,我想查詢與某個位置匹配的所有想法。我不是如何在Rails中進行反向連接查詢。
我想你想的:
Idea.joins(:user).where(user: {lat: some_lat, lng: some_lng}).all
some_lat
/some_lng
可以是一個範圍。 Rails將處理這個魔法。
我想你必須搜索所有符合你的位置的用戶,並在加載時包含這些想法。
# first about the near by:
def close_to(position)
(position-0.2)..(position+0.2)
end
@users = User.where(:lat => close_to(some_lat), :lng => close_to(some_lng)).includes(:ideas)
# if you need all the ideas:
@ideas = []
@users.each do |user|
@ideas += user.ideas
end
否則,您在用戶數組中有用戶排序的所有想法。或者我錯過了你的問題?
第一:你如何找到想要的地點?可能你可以使用Geocoder之類的東西(有一個RailsCast about it)。
現在我有一個類似的問題在不久的將來,但就目前而言,我想我可能會做兩步(雙查詢):
@users = User.near(params[:location]).pluck(:id)
@ideas = Ideas.where(:user_id => @users)
這樣你得到附近的思路想要的位置(我在這裏使用了Geocoder方法,但可以以不同的方式獲取用戶)。
注:我假設用戶有很多的想法和理念屬於用戶
你可以告訴rails用'.includes(:ideas)'加載屬於用戶的想法。 – klump 2012-04-25 19:08:06
如果你有確切的經度和緯度,這可能是一個很好的解決方案(雖然很少有可能與花車確切/十進制) – 2012-04-25 18:54:54
他應該能夠通過一個範圍:'some_lat = 56.311018..56.711018'。而這些的生成可以通過一種方法來完成。 – klump 2012-04-25 18:58:51
這超出了問題的範圍。 'some_lat'可以是一個範圍。 Rails將處理這個魔法。 – jdoe 2012-04-25 19:01:35