2012-07-23 74 views
0

我正在尝试使用acts_as_api。我试着按照他们的教程,但当我去到适当的网页时,我得到了有关标题的错误,并且屏幕上没有出现任何内容。下面是我的了:Rails:acts_as_api:已完成406不可接受

应用程序/控制器/ qtls_controller.rb

def show_json 
    show_id = URI.decode(params[:id]) 
    show_id = show_id.gsub(/\s*$/,'') 
    @qtls = Qtl.find_by_sql("select * from qtls where qtl_name like '%#{show_id}%' or qtl_symbol in (select qtl_symbol from obs_traits where qtl_symbol like '%#{show_id}%' or trait_name like '%#{show_id}%');") 
    respond_to do |format| 
    format.json { render_for_api :lis_json, :json => @qtls, :root => :qtls } 
    end 
end 

应用程序/模型/ qtl.rb

​​

编辑:

,当我做到这一点的轨道控制台

@qtls.as_api_response :lis_json, :root => :qtls 

我得到这个(无根)IDK的,如果这可能是问题:

=> [{:lod=>#<BigDecimal:8063e1cb0,'0.0',9(18)>, :comment=>"Marker-Interval: L040.75–BMd027", :qtl_symbol=>"Pl ht", :entry_name=>"SRK20120130.4", :left_end=>#<BigDecimal:8063e1a08,'0.2964E2',18(18)>, :marker_r2=>#<BigDecimal:8063e1c38,'0.1952E0',9(18)>, :qtl_symbol_id=>"2-2", :right_end=>#<BigDecimal:8063e1990,'0.4503E2',18(18)>, :total_r2=>#<BigDecimal:8063e1bc0,'0.4812E0',9(18)>, :qtl_pub_name=>"Plh1-2", :nearest_marker=>"X010.85", :additivity=>#<BigDecimal:8063e1b48,'0.19E0',9(18)>, :favorable_allele_source=>"G2333", :species=>"phavu", :map_collection=>"G2333_x_G19839", :treatment=>"Darien high phosphorus", :qtl_name=>"Pl ht 2-2", :lg=>"Pv04"}, {:lod=>#<BigDecimal:8063e1800,'0.0',9(18)>, :comment=>"Marker-Interval: BM189–BMd036", :qtl_symbol=>"Pl ht", :entry_name=>"SRK20120130.4", :left_end=>#<BigDecimal:8063e1558,'0.877E1',18(18)>, :marker_r2=>#<BigDecimal:8063e1788,'0.1399E0',9(18)>, :qtl_symbol_id=>"2-1", :right_end=>#<BigDecimal:8063e14e0,'0.1526E2',18(18)>, :total_r2=>#<BigDecimal:8063e1710,'0.5119E0',9(18)>, :qtl_pub_name=>"Plh1-1", :nearest_marker=>"BM189", :additivity=>#<BigDecimal:8063e1698,'0.14E0',9(18)>, :favorable_allele_source=>"G2333", :species=>"phavu", :map_collection=>"G2333_x_G19839", :treatment=>"Popayan", :qtl_name=>"Pl ht 2-1", :lg=>"Pv03"}, {:lod=>#<BigDecimal:8063e1350,'0.0',9(18)>, :comment=>"Marker-Interval: PV-ctt001–BM161", :qtl_symbol=>"Pl ht", :entry_name=>"SRK20120130.4", :left_end=>#<BigDecimal:8063e10a8,'0.8743E2',18(18)>, :marker_r2=>#<BigDecimal:8063e12d8,'0.1403E0',9(18)>, :qtl_symbol_id=>"2-3", :right_end=>#<BigDecimal:8063e1030,'0.9362E2',18(18)>, :total_r2=>#<BigDecimal:8063e1260,'0.5276E0',9(18)>, :qtl_pub_name=>"Plh1-3", :nearest_marker=>"PV-ctt001", :additivity=>#<BigDecimal:8063e11e8,'0.14E0',9(18)>, :favorable_allele_source=>"G2333", :species=>"phavu", :map_collection=>"G2333_x_G19839", :treatment=>"Popayan", :qtl_name=>"Pl ht 2-3", :lg=>"Pv04"}] 

这工作:

render :json => @qtls.as_api_response(:lis_json, :root => 'qtls') 

,但它不会产生的根源,就像在控制台...

+0

你如何查询控制器?通过浏览器? – apneadiving 2012-07-23 14:59:31

+0

是的,当我只是渲染普通的旧json时,它工作的很好:json => @qtls。我想要一些更具定制性的行为与acts_as_api – bdeonovic 2012-07-23 15:08:09

+0

嗯,你明确有一个.json的网址? – apneadiving 2012-07-23 15:33:27

回答

1

似乎服务器不接受你所要求的格式。

确保您的请求确定您想要的响应格式。在Rails中默认,您可以将其添加到网址中,例如posts/1.json或将其添加为HTTP Accept-Header。

检查您的日志文件以了解操作是如何处理的。它会应该这样说:

Started GET "/qtls/show_json.json" for 127.0.0.1 at 2012-07-23 19:53:11 Processing by QtlsController#show_json as JSON

但我想在你的情况下,它会说这样的事情:

Processing by QtlsController#show_json as HTML

的Rails默认为HTML,如果没有响应格式给出。 但你只允许渲染块中的​​json响应。

respond_to do |format| 
    format.json { render_for_api :lis_json, :json => @qtls, :root => :qtls } 
end 

这就是为什么导轨和406响应它假定客户想要HTML(默认格式),但respond_to块只允许JSON。

如果你只是打电话render :json它的作品,因为你没有区分响应格式,你只需强制控制器响应与json。