rails在查询中运行函数

时间:2011-07-26 17:15:31

标签: mysql ruby-on-rails ruby ruby-on-rails-3

如果我有以下查询,是否可以在里面运行一个函数?假设我想添加WHERE zip_code = user_distance(zip_code)

我想从每一行获取数据并在实际选择之前通过函数运行它。

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

1 个答案:

答案 0 :(得分: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。