创建自定义rails方法以查找属于用户的对象

时间:2013-10-10 23:33:09

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

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

我对如何实现这一点感到茫然。我希望能够使用第三方Objective-C类NSRails远程调用此方法。有什么帮助吗?

2 个答案:

答案 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'
…