我的rails应用中有一个名为search
的自定义操作,它有两个相应的页面:
search.html.haml
search.json.rabl
与search
方法对应的表单如下所示:
= form_tag(listings_search_path) do
.input-group.search-input-group
%span#search-icon-addon.input-group-addon
%span.glyphicon.glyphicon-search
= text_field_tag :search, nil, :class => "form-control", :placeholder => " Search for spaces.", "aria-describedby" => "search-icon-addon"
#search-btns.col-md-12
= button_tag :Search, :class => "btn btn-default search-btns", :value => "Search"
= link_to 'listings/findnearme', :class => "btn btn-default search-btns" do
%span.glyphicon.glyphicon-map-marker
Find Near Me
路线:
post 'listings/search'
当我提交html响应表单时,它完全正常并按预期调用search
方法:
# search method
def search
@listings = Listing.search(params[:search].downcase)
respond_with(@listings)
end
在我的控制器顶部(在任何操作之外),我有:
respond_to :xml, :json, :html
但是当我将.json
添加到网址时,它会调用show
操作。
我如何从search
方法获得JSON响应?
TL; DR :
调用“localhost:3000 / listings / search”转到search.html.haml
并调用正确的操作search
。
调用“localhost:3000 / listings / search.json”不转到search.json.rabl
并调用show
操作。
Rails,你不打电话给自定义动作吗?
答案 0 :(得分:1)
我怀疑您需要在路由中添加(:。format)作为可选参数,或者设置请求类型标头。您可以在jQuery中尝试这个来调用JSON操作:
$.ajax({url: '/listings/search', dataType: 'JSON', method: 'GET'})
基本上,请求类型不是从.json中获取的,您需要输入正确的请求类型或通过路由设置它。