我需要在 Rails 中创建一个方法,该方法将返回属于用户的所有对象(在给定 URL 方案上调用该方法的路由)。每个对象都包含一个用户属性,但我现在有近 400,000 个对象,因此将它们全部返回并在应用程序中进行排序变得非常慢。
我不知道如何做到这一点。我希望能够使用第三方 Objective-C 类 NSRails 远程调用此方法。有什么帮助吗?
我需要在 Rails 中创建一个方法,该方法将返回属于用户的所有对象(在给定 URL 方案上调用该方法的路由)。每个对象都包含一个用户属性,但我现在有近 400,000 个对象,因此将它们全部返回并在应用程序中进行排序变得非常慢。
我不知道如何做到这一点。我希望能够使用第三方 Objective-C 类 NSRails 远程调用此方法。有什么帮助吗?
您可以通过几种不同的方式来执行此操作,或者通过在对象上创建范围并通过查询参数进行过滤,或者通过设置专用于该操作的非资源路由。我将通过后者的一个例子。
# 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 字段添加索引,因为您将根据该值查询数据库。希望这会有所帮助。
我联系了 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'
…