web-dev-qa-db-ja.com

Railsでj関数は何をしますか?

Railsのj関数について言及しているブログを見つけました。彼らはajaxスタイルのページ更新を行うためにそれを使用していました。

$('#cart').html("<%=j render @cart %>");

パーシャルを使用してcartパーシャルをレンダリングしていますが、jの意味は何ですか?文字列をJavaScriptが受け入れるものに変換するという記事をいくつか見つけましたが、それはどういう意味ですか?

51
Tyler DeWitt

escape_javascript(javascript)

JavaScriptセグメントのキャリッジリターンと一重引用符および二重引用符をエスケープします。

エイリアスj()からも利用できます。

the Rails docs から。

61
Peter Sobot

ピーターは実際に正しい答えを投稿しました。ただし、詳しく説明します。

Ajaxの基本的な概念に精通していると思いますか?コメントを無作法に作成したいとします。 Railsでは、次のようにCommentsController[〜#〜] post [〜#〜]リクエストに応答できます:

def create
  @comment = Comment.new(params[:comment])
  respond_to do |format|
    render.js
  end
end

つまり、クライアントからのajaxリクエスト(jquery/javascript経由)がCommentsControllerに送信された場合、フォーマット(.js)そして_ create.js.erbパーシャルで応答します。次に、パーシャルは次のようなもので新しいコメントをレンダリングします。

$('.comments').append("<%=j render @comment %>");

jまたはescape_javascriptメソッドにアクセスするには:一部のevilユーザーは、ページで実行される(悪意のある)JavaScriptを含むコメントを送信する可能性があります- nlessjメソッドを使用する

JavaScriptセグメントのキャリッジリターンと一重引用符および二重引用符をエスケープします。

そのため、ブラウザでのコードの実行が妨げられます。

73
wpp