使用RABL gem调用自定义操作? Rails 4和RABL

时间:2015-06-15 20:13:36

标签: ruby-on-rails ruby json rabl

我的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,你不打电话给自定义动作吗?

1 个答案:

答案 0 :(得分:1)

我怀疑您需要在路由中添加(:。format)作为可选参数,或者设置请求类型标头。您可以在jQuery中尝试这个来调用JSON操作:

$.ajax({url: '/listings/search', dataType: 'JSON', method: 'GET'})

基本上,请求类型不是从.json中获取的,您需要输入正确的请求类型或通过路由设置它。