如何在以JSON呈现时使用不同的foreign_key显示作为关联名称来创建自定义belongs_to关联?



我对rails相当不熟悉,并且通过belongs_to在我的Champion模型上建立了5个关联,该模型连接到Ability模型,该模型与Champion模型有一个has_one关联。

这5个关联使用与关联名称加"_id"匹配的外键。当我去渲染页面时,我看到"_id"值作为整数出现,但希望这些值显示为实际记录。因此,它不只是显示一个整数,而是显示完整的Ability记录及其所有字段。

这是我的冠军。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

和能力。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"one_answers"被动"没有"_id",并显示整个能力记录?现在它只显示包含id的实际数据库字段,但不像我想要的那样显示记录。任何帮助都是感激的!

最简单的方法是:

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

我可能会建议看看像RABL这样的东西。它将使处理这些更复杂的json响应更简洁。这里有一个很好的railcast

相关内容

  • 没有找到相关文章

最新更新