Javascript 将属性传递给方法jQuery和Rails
我试图将数据jqueryajax发布到控制器中的一个自定义方法中,以便构建动态数据库查询,我从下拉菜单中获取值,并将它们用作搜索查询 我的方法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
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