web-dev-qa-db-ja.com

rails respond_to format.js API

私は経験豊富な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' }

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

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

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

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

ここでjsは、コントローラーメソッドが応答として送り返すMIMEタイプを指定します。
デフォルトRails mime-types
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
103
ted

これがあなたが探していたURLだと思います:

https://apidock.com/Rails/ActionController/MimeResponds/InstanceMethods/respond_to

これは、たとえば、返される小さな1行のjsステートメントのみがあり、かつcontroller_action_name.js.erbのようなRJSファイルに従うことを望まない(---)

respond_to do |format|
  format.html { redirect_to new_admin_session_path }
  format.js   { render :js => "window.location='#{ new_admin_session_path }'" }
end
9
Magne