2013-01-09 30 views
2

我對軌道相當陌生,並且通過我的Champion模型中的belongs_to創建了5個關聯,這些關聯連接到具有has_one關聯的Ability模型,返回到Champion模型。如何使用不同的foreign_key顯示與作爲JSON呈現時的關聯名稱進行自定義belongs_to關聯?

這5個關聯使用與關聯名稱和「_id」匹配的外鍵。當我去渲染頁面時,我將「_id」值看作整數出現,但希望這些值顯示爲實際記錄。因此,不是隻顯示一個整數,而是顯示完整的Ability記錄及其所有字段。

這裏是我的Champion.rb型號:

class Champion < ActiveRecord::Base 
    attr_accessible :q_id, 
        :w_id, 
        :e_id, 
        :r_id, 
        :passive_id 

    belongs_to :q, :class_name => "Ability", :foreign_key => "q_id" 
    belongs_to :w, :class_name => "Ability", :foreign_key => "w_id" 
    belongs_to :e, :class_name => "Ability", :foreign_key => "e_id" 
    belongs_to :r, :class_name => "Ability", :foreign_key => "r_id" 
    belongs_to :passive, :class_name => "Ability", :foreign_key => "passive_id" 
end 

而且ability.rb型號:

class Ability < ActiveRecord::Base 
    has_one :champion 
end 

而控制器顯示模式:

class ApplicationController < ActionController::Base 
    protect_from_forgery 

    def show_all 
    load_models 

    respond_to do |format| 
     format.json { render :json => { "champions" => @champions } } 
    end 
    end 

    protected 
    def load_models 
    @champions = Champion.all 
    end 
end 

那麼怎麼辦我將它設置爲使JSON顯示「q」,「w」,「e」,「r」和「被動」而不帶「_id」,並顯示整個能力線?現在它只顯示包含ID的實際數據庫字段,但不顯示我想要的記錄。任何幫助表示讚賞!

回答

0

最簡單的方法是這樣的:

respond_to do |format| 
    format.json { render :json => @champions.to_json(:include => {:q => {}, :w => {}}) } 
end 

我可能會建議雖然尋找到像RABL。它將使它更清晰地處理這些更復雜的json響應。有一個很好的Railscast here

相關問題