我有两个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语句中。
有什么见解?
答案 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