0

我需要在 Rails 中创建一个方法,该方法将返回属于用户的所有对象(在给定 URL 方案上调用该方法的路由)。每个对象都包含一个用户属性,但我现在有近 400,000 个对象,因此将它们全部返回并在应用程序中进行排序变得非常慢。

我不知道如何做到这一点。我希望能够使用第三方 Objective-C 类 NSRails 远程调用此方法。有什么帮助吗?

4

2 回答 2

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 字段添加索引,因为您将根据该值查询数据库。希望这会有所帮助。

于 2013-10-11T01:05:13.640 回答
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'
…
于 2013-10-11T16:19:46.187 回答