Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby Rails查找活动资源时忽略参数_Ruby_Ruby On Rails 3_Ruby On Rails 3.1_Activeresource - Fatal编程技术网

Ruby Rails查找活动资源时忽略参数

Ruby Rails查找活动资源时忽略参数,ruby,ruby-on-rails-3,ruby-on-rails-3.1,activeresource,Ruby,Ruby On Rails 3,Ruby On Rails 3.1,Activeresource,我有两个Rails应用程序,一个使用ActiveResource的客户端和一个服务。我正在通过控制台测试以下命令: User.find(:all, :params => {:email_address => "myemail@domain.com"}) 我将返回用户表中的所有记录,而不仅仅是电子邮件参数中指定的记录 当我去查看我的服务应用程序的日志时,它显示如下 Started GET "/users.json?email_address=myemail%40domain.com"

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

User.find(:all, :params => {:email_address => "myemail@domain.com"})
我将返回用户表中的所有记录,而不仅仅是电子邮件参数中指定的记录

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

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语句中


任何洞察?

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

User.find(:all, :conditions => { :email_address => "myemail@domain.com" })
或采用更多Rails 3样式:

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

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

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

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

请发布您的服务应用程序用户|控制器索引方法尝试使用:conditions代替:paramsher是我在users=User处的索引。所有响应| do | format | format.json{render json:@users}end Using conditions不通过参数,并在2011-12-29 12:08:41-0600由UsersControllerindex处理127.0.0.1的GET/users.json,当json用户加载0.3ms选择用户时。*从用户在12ms视图中完成200 OK:7.0ms | ActiveRecord:4.1ms客户端和客户端上的用户控制器和模型服务是从一个脚手架生成的,到目前为止除了更改客户端的模型以使用Active Resource并设置self.site url之外,没有任何更改。@user1084769,您确定您说的是ActiveResource而不是ActiveRecord吗?谢谢jstim。我发现参数和条件与activeresource和activerecord之间的区别也是一样的。我的目标是让用户从activeresource客户端登录到activerecord服务应用程序。验证这两个参数后,用户数据将发送回客户端,以便我可以设置会话。在我最初的问题中,我第一次尝试发送一个电子邮件地址并找回一个用户,但仍然没有成功。当我通过id查询像这样异常的数据时,我是否需要特殊的路由或控制器中的某些东西来处理这个问题?我认为您不需要任何特殊的东西。这些都是AR或as的一部分。不过,正如上面提到的,您的控制器中可能有某种东西正在覆盖此搜索。你能发布你的控制器吗?同样要澄清的是,哪个应用程序持有用户表?是使用AR还是AS的?您是在缓存双方的用户,还是会混淆db调用?ActiveRecord保留用户表。因此,所有关于ActiveResource的讨论都与搜索语法问题无关。我将更新我的答案,以显示正确的AR调用,但查看您的控制器以确认没有任何内容覆盖您的搜索仍将很有帮助。