1

すでに展開されているモバイル アプリを機能させるには、JSON 応答にトップ レベルのノードを含める必要があります。私のモデルは、投稿が属する_言語である言語と投稿です。アプリが必要とする応答は次のとおりです。

{
  "english": {
  "posts": [
  {
    "title": "title",
    "content": "content"
  },

私の言語コントローラーコードは次のようになります。

@posts = @language.posts
render :json => { :posts => @posts.as_json

1 レベル上の JSON で言語を取得する必要があるだけです。これを処理する環境または deploy.rb に構成はありませんか?

ありがとう

4

3 に答える 3

2

JSON テンプレートを使用しないのはなぜですか? その後、必要に応じてカスタマイズできます。

たとえば、コントローラーで次のようにします。

# app/controllers/posts_controller.rb
def show
  @language = ...
  @posts = ...
  respond_to do |format|
    format.json
  end
end

次に、あなたの見解では、

/* app/views/posts/show.json.erb */
{
  "<%= @language =>": {
    "posts": <%= @posts.to_json.html_safe =>
  }
}

この方法で JSON をネストすると、構文の問題が発生するかどうかはわかりません。または、ハッシュを作成してから を呼び出すこともできますto_json。例えば、

def show
  @language = ...
  @posts = ...
  render json: { @language => @posts }
end
于 2013-05-26T00:04:41.917 に答える
1

@language.as_json(:include => :posts)あなたが望むものを生み出すでしょう、私は信じています。

編集:

class Language < ActiveRecord::Base
  ...
  def to_json(opts = {})
    {self.name => self.posts}.to_json(opts)
  end
  ...
end
于 2013-05-25T23:26:00.490 に答える
1

すべての JSON 応答に root を含めたい場合は、直接アクセスできます。config/initializers/wrap_parameters.rb

そこに表示されます/または存在しない場合は追加できます

# To enable root element in JSON for ActiveRecord objects.
ActiveSupport.on_load(:active_record) do
 self.include_root_in_json = true
end

また

これでは不十分で、JSON データをさらにカスタマイズしたい場合は、active_model_serializersに連絡してください。1 分以内にカスタム JSON 応答が得られ、それらをビュー / レンダリングでのみ使用することに限定されません。

于 2013-05-26T04:27:06.547 に答える