使用活动资源忽略参数查找Rails

时间:2011-12-29 17:35:26

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

我有两个Rails应用程序,一个使用ActiveResource的客户端和一个服务。我正在通过控制台测试以下命令:

User.find(:all, :params => {:email_address => "myemail@domain.com"})

我收回用户表中的所有记录,而不仅仅是我的email参数中指定的记录。

当我查看我的服务应用程序的日志时,它显示如下

Started GET "/users.json?email_address=myemail%40domain.com" for 127.0.0.1 at 2011-12-29 11:29:06 -0600
   (0.4ms)  SHOW search_path
  Processing by UsersController#index as JSON
  Parameters: {"email_address"=>"myemail@domain.com"}
  User Load (0.7ms)  SELECT "users".* FROM "users" 
Completed 200 OK in 40ms (Views: 35.7ms | ActiveRecord: 3.3ms)

我的参数未包含在SQL语句中。

有什么见解?

2 个答案:

答案 0 :(得分:0)

条件通过find选项传递给ActiveRecord :conditions方法,而不是:params。因此,您的find电话应该是这样的:

User.find(:all, :conditions => { :email_address => "myemail@domain.com" })

或更多Rails 3风格:

User.where(:email_address => "myemail@domain.com").all

您可以在docs中找到find方法的可用参数的完整列表。

答案 1 :(得分:0)

根据您对原始问题的评论,您的控制器仍然如下所示:

class UsersController < ActionController::Base 
 def index
   @users = User.all
   respond_to do |format|
     format.json { render json: @users }
   end
 end
   #other methods down here
end

但是为了使您的索引视图只呈现与电子邮件匹配的索引视图,您需要将索引方法更新为:

class UsersController < ActionController::Base 
 def index
   @users = User.find_all_by_email_address(email_address)
   respond_to do |format|
     format.json { render json: @users }
   end
 end
   #other methods down here
end