1

背景と私の研究

ブラウザでページをリロードせずに、サーバーからクライアントにデータを送信したいと考えています。Rails ガイドを読んでいて、JSON の使用が有望に思えました。(私が間違っている場合は修正してください)。

2.2.8 JSON のレンダリング

JSON は、多くの AJAX ライブラリで使用される JavaScript データ形式です。Rails には、オブジェクトを JSON に変換し、その JSON をブラウザーにレンダリングするためのサポートが組み込まれています。

render :json => @product レンダリングしたいオブジェクトで to_json を呼び出す必要はありません。:json オプションを使用すると、render は自動的に to_json を呼び出します。


問題

この JSON オブジェクトをブラウザ側でレンダリングできるようにしたいと考えています。以下は、問題の適切なコードです。

動画コントローラー

class VideosController < ApplicationController
  include VideosHelper

  def home
    @video = Video.last
  end

  def next
    @next_video = next_video(params[:id])
    render :json => @next_video
  end
end

next.json.erb

{
  "title": "<%= @video.title %>"
  "url": "<%= @video.url %>"
  "youtube_id": "<%= @video.youtube_id %>"
  "genre": "<%= @video.genre %>"
  "category": "<%= @video.category %>"
  "likes": "<%= @video.likes %>"
  "dislikes": "<%= @video.dislikes %>"
  "views": "<%= @video.views %>"
  "user_id": "<%= @video.user_id %>"
  "created_at": "<%= @video.created_at %>"
  "updated_at": "<%= @video.updated_at %>"
}

アクション@next_videoでJSONオブジェクトをレンダリングしたい場合。homeどうすればいいですか?

4

1 に答える 1

0

私が推測するいくつかのjsハンドラーが必要です。home.html.erb のようなもの:

$.ajax({
  url: '<%= next_video_path(@video.id) %>',
  type: "GET",
  dataType: "json",
  success: function(data) {
    // something brilliant here 
  }
})

また、next.json.erb で @video を @next_video に変更する必要があります (次のアクションで @video が初期化されていないため)。また、もう 1 つの提案 - 次の名前を show に変更し、home を削除する REST を使用できます (show now に置き換えることができるため)。以前のコードを次のように変更する必要があります。

$.ajax({
  url: '<%= video_path(@video.next) %>',
  type: "GET",
  dataType: "json",
  success: function(data) {
    // something brilliant here 
  }
})

@video.next は次のビデオの ID を返します。

于 2012-09-30T21:33:15.080 に答える