Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/392.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.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
Javascript 将属性传递给方法jQuery和Rails_Javascript_Jquery_Ruby On Rails_Ajax - Fatal编程技术网

Javascript 将属性传递给方法jQuery和Rails

Javascript 将属性传递给方法jQuery和Rails,javascript,jquery,ruby-on-rails,ajax,Javascript,Jquery,Ruby On Rails,Ajax,我试图将数据jqueryajax发布到控制器中的一个自定义方法中,以便构建动态数据库查询,我从下拉菜单中获取值,并将它们用作搜索查询 我的方法 class PublicController < ApplicationController def rehomed(query={}) Animal.where(query).to_json respond_to do |format| format.js {render :json => {} } e

我试图将数据jqueryajax发布到控制器中的一个自定义方法中,以便构建动态数据库查询,我从下拉菜单中获取值,并将它们用作搜索查询

我的方法

class PublicController < ApplicationController

  def rehomed(query={})
   Animal.where(query).to_json

    respond_to do |format|
     format.js {render :json => {} }
   end
  end

end
因此,作为一个例子,如果用户从下拉菜单中选择“Cat”,那么来自我的方法的查询应该是

Animal.where(animal_type: 'Cat')
目前,它正在执行的查询是

SELECT "animals".* FROM "animals"
这就是挑选每一种动物

我该如何做到这一点?在{render:json=>{}中传递什么


我正在试图找出如何将所有这些放在一起。

您需要捕获并传递查询结果。使用params从请求中获取param信息

def rehomed
  @animals = Animal.where(animal_type: params[:animal_type])

  respond_to do |format|
    format.js {render :json => @animals }
  end
end
还是一行

def rehomed
  respond_to do |format|
    format.js {render :json => Animal.where(animal_type: params[:animal_type])}
  end
end
注意,我没有调用_json,因为render:json会将查询结果转换为json。

将jQuery更改为:

$('select.btn').on('change', function() {
 var animal_type = $('#animalType option:selected').text();
 var animal_town = $('#animalTown option:selected').text();

 $.ajax({
  type: 'POST',
  url: '/public/rehomed',
  data: { 'query': { 'animal_type': animal_type } }, // or 'name': animal_name etc
  success: function(data) {
    console.log(data);
  }
 });
});
然后在控制器中:

class PublicController < ApplicationController

  def rehomed
    respond_to do |format|
     format.js { render :json => Animal.where(params[:query]) } 
    end
  end

end

我不确定您的操作定义是否接受查询参数,但您是否尝试过:Animal.whereparams以查看是否执行了正确的查询?它将不起作用,因为控制器中的查询将只有一个空哈希,这意味着OP将拥有当前查询:如问题中所述,从动物中选择动物。*。您可能应该筛选查询,传递完整的查询对象可能会导致安全问题。事实上,您将能够传递一个字符串,它将被注入WHERE子句中,我同意。您不能信任在internet上提交给您的参数。我会写一张便条的。谢谢
class PublicController < ApplicationController

  def rehomed
    respond_to do |format|
     format.js { render :json => Animal.where(params[:query]) } 
    end
  end

end
  def rehomed
    respond_to do |format|
     format.js { render :json => Animal.where(:animal_type => params[:animal_type]) } 
    end
  end