2

私はレールにかなり慣れていないので、Champion モデルへの has_one 関連付けを持つ Ability モデルに接続する、Champion モデルの belongs_to を介して作成された 5 つの関連付けがあります。

これら 5 つの関連付けは、関連付け名と「_id」に一致する外部キーを使用します。ページをレンダリングすると、「_id」の値が整数として表示されますが、それらを実際のレコードとして表示したいと考えています。したがって、整数を表示するだけでなく、すべてのフィールドを含む完全な能力レコードを表示します。

ここに私の 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 が "_id" なしで "q"、"w"、"e"、"r"、および "passive" を表示し、Ability レコード全体を表示するように設定するにはどうすればよいでしょうか? 現在、ID を含む実際のデータベース フィールドのみが表示されますが、必要なレコードは表示されません。どんな助けでも大歓迎です!

4

1 に答える 1

0

最も簡単な方法は次のようなものです。

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

ただし、 RABLのようなものを調べることをお勧めします。これらのより複雑な json 応答を処理することがより明確になります。ここには優れた Railscast があります

于 2013-01-09T23:37:26.013 に答える