我需要在Rails中创建一个方法,它将返回属于用户的所有对象(在给定的URL方案上调用方法的路由)。每个对象都包含一个用户属性,但我现在有近400,000个对象,所以返回它们并在应用程序中排序变得非常慢。
我对如何实现这一点感到茫然。我希望能够使用第三方Objective-C类NSRails远程调用此方法。有什么帮助吗?
答案 0 :(得分:2)
您可以通过几种不同的方式执行此操作,方法是在对象上创建范围并通过查询参数进行过滤,或者通过设置专用于此操作的非资源路径。我将通过后者的一个例子。
# in config/routes.rb
resources :object do
get "users/:user_id", on: :collection
end
这会将您的路线映射到objects/users/:user_id
# In your ObjectsController
def users
@objects = Object.where(user_id: params[:user_id])
end
为了更快的读取速度,请在对象的user_id字段中添加索引,因为您将根据该值查询数据库。希望这会有所帮助。
答案 1 :(得分:0)
我联系了NSRails的开发人员,他非常乐于助人。虽然@tomciopp有我确定的工作,但我最终得到了Dan的解决方案。这是:
users_controller.rb
...
# GET /users/find_by_email
def find_by_email
@users = User.where(:email => params[:email])
respond_to do |format|
format.json { render :json => @users.to_json }
end
end
…
routes.rb
…
match 'users/find_by_email' => 'users#find_by_email'
…