45

私は経験豊富な Java および C++ 開発者であり、Rails の仕組みを理解しようとしています。

以下のコードを取得しました。

respond_to do |format|
      if @line_item.save
        format.html { redirect_to store_url }
        format.js { render :json => @line_item, :mime_type => Mime::Type.lookup('application/json'), 
                :callback => 'javascriptFunction' }

内部で渡すことができるものを定義するAPIを検索していましたが、format.js {}見つかりませんでした..

まず第一に: はどのようなステートメントformat.jsですか、それは変数ですか?

そして最も重要なこと: format.js {} に渡すことができる属性は何ですか? あなたは直接リンクを渡すことができますか?http://api.rubyonrails.org/を検索しました

4

2 に答える 2

115
respond_to do |format|
  format.js # actually means: if the client ask for js -> return file.js
end

jsここでは、コントローラー メソッドが応答として返す MIME タイプを指定します。
デフォルトの Rails MIME タイプ
あなたも試してみるとformat.yaml

respond_to do |format|
  format.js
  format.yaml
end

これは、コントローラーが返されるか、クライアント側の要求に応じて返されることを意味しymlますjs

{}ruby に関して言えば、ブロックです。何も指定しない場合、Rails は app/views/[コントローラー名]/[コントローラー メソッド名].[html/js/...] からデフォルト ファイルをレンダリングしようとします。

# app/controllers/some_controller.rb
def hello
  respond_to do |format|
    format.js
  end
end

を探します/app/views/some/hello.js.erb。// 少なくとも Rails v. 2.3 では。

ブロックを指定する場合:

respond_to do |format|
    # that will mean to send a javascript code to client-side;
    format.js { render             
        # raw javascript to be executed on client-side
        "alert('Hello Rails');", 
        # send HTTP response code on header
        :status => 404, # page not found
        # load /app/views/your-controller/different_action.js.erb
        :action => "different_action",
        # send json file with @line_item variable as json
        :json => @line_item,
        :file => filename,
        :text => "OK",
        # the :location option to set the HTTP Location header
        :location => path_to_controller_method_url(argument)
      }

  end
于 2012-11-24T21:35:21.663 に答える