2012-07-23 78 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。