2011-07-26 82 views
0

如果我有以下查詢,是否可以在裏面運行一個函數?假設我想添加WHERE zip_code = user_distance(zip_code)內部查詢軌運行功能

我想從每一行獲取數據並在實際選擇它之前通過函數運行它。

@posts = Listing.find_by_sql(["SELECT * FROM listings WHERE industry = ? && ", current_user.industry]) 
+2

你想在選擇它之前通過_ruby_函數來運行它? –

+0

是的 - 我想要做的是從'上市'拉一個郵政編碼,並計算該郵政編碼和用戶設置郵政編碼(我有一個功能)之間的距離,如果它小於用戶設置'max_distance'然後選擇列表行。在SQL之外可能有更好的方法來做這件事,不確定,我真的很陌生。 – stewart715

回答

0

如果你主要是希望得到這個工作,而不是擔心這麼多的性能(因爲直行到SQL是不是通過ActiveRecord的會更快),那麼你可以這樣做:

listings = [] 
Listing.all.each do |listing| 
    listings << listing if user_distance(listing.zip_code) 
end 

所以,如果user_distance方法返回true(或設置),它會遍歷每個列表並將其添加到該數組。

您可以做的另一件事是在您的數據庫中設置一個存儲過程(「存儲過程」),該過程需要一個郵政編碼並返回您想要的內容(即與user_distance完全相同),並且用戶定義的變量max_distance可能位於數據庫表中,因此您的存儲過程可以訪問該變量。然後你可以從SQL調用存儲過程,並且仍然可以傳入每行的zip_code。