Ruby on rails Rails:acts_as_api:完成406不可接受

Ruby on rails Rails:acts_as_api:完成406不可接受,ruby-on-rails,Ruby On Rails,我正在尝试使用acts作为api。我试着跟随他们的教程,但我得到了名义上的错误,当我转到相应的网页时,屏幕上什么也没有显示。以下是我得到的: app/controllers/qtls\u 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_

我正在尝试使用acts作为api。我试着跟随他们的教程,但我得到了名义上的错误,当我转到相应的网页时,屏幕上什么也没有显示。以下是我得到的:

app/controllers/qtls\u 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
app/models/qtl.rb

 class Qtl < ActiveRecord::Base
   self.primary_key = "qtl_name"
   acts_as_api

   api_accessible :lis_json do |t|
      t.add :qtl_name
      t.add :qtl_symbol
      t.add :qtl_symbol_id
      t.add :qtl_pub_name
      t.add :favorable_allele_source
      t.add :treatment
      t.add :lod
      t.add :marker_r2
      t.add :total_r2
      t.add :additivity
      t.add :map_collection
      t.add :entry_name
      t.add :lg
      t.add :left_end
      t.add :right_end
      t.add :nearest_marker
      t.add :species
      #t.add :trait_name
      t.add :comment
   end
     def species
       'phavu'
     end
     #def trait_name
 #       '' << ObsTrait.find_by_sql("select trait_name from obs_traits where entry_name = '#{entry_name}' and qtl_symbol = '#{qtl_symbol}'")[0].trait_name
  #   end
 end
我得到这个(没有根)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"}]

但它不会像在控制台中那样生成根…

服务器似乎不接受您要求的格式

确保您的请求确定了所需的响应格式。作为Rails中的默认设置,您可以将其添加到url中,例如
posts/1.json
,或者将其添加为HTTP Accept头

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


2012-07-23 19:53:11开始获取127.0.0.1的“/qtls/show_json.json”
QtlsController处理#将_json显示为json

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


QtlsController处理#将json显示为HTML

如果没有给出响应格式,Rails默认为HTML。 但在呈现块中只允许json响应

respond_to do |format|
  format.json { render_for_api :lis_json, :json => @qtls, :root => :qtls }
end
这就是Rails响应406的原因。它假定客户端需要HTML(默认格式),但
respond\u to
块只允许json


如果您只调用
render:json
它就可以工作,因为您不区分响应格式,您只需强制控制器使用json进行响应。

如何查询控制器?通过你的浏览器?是的,当我用render:json=>@qtls呈现简单的旧json时,它工作得很好。我想用acts_as_apiMmm实现更可定制的功能,url中是否有明确的.json?没有,但正如我所说,当我使用render:json时,它可以工作
 render :json => @qtls.as_api_response( :lis_json, :root => 'qtls')
respond_to do |format|
  format.json { render_for_api :lis_json, :json => @qtls, :root => :qtls }
end