1

私は現在、リモートフォームを必要とするアプリケーションを構築していますが、レールがどのように機能するかを本当に理解していないことに気づきrespond_toました。

たとえば、ビューに次のコードがあります

<%= form_tag ..., :remote => true %>
<%= submit_tag "submit" %>
<% end %>

そして、私は という名前の JavaScript パーシャルを持っています。_home.js.erb関連するアクションの名前が であるとしhomeます。

コントローラーに次のコードがある場合、それを理解しています。

def home
    # ...
    respond_to do |format|
        format.html
        format.js { render :partial => 'home' }
    end
end

_home.js.erbこれにより、フォームの送信ボタンが押されたときにJavaScript が実行されます。しかし、送信ボタンが押されたとき、正確には何が起こっているのでしょうか? respond_toRailsはhtmlかjavascriptかをどのくらい正確に知っていますか?

どうもありがとうございました!

4

3 に答える 3

1

タイプが_

  • html
  • js

それ以外の場合、応答タイプの名前である object.method を呼び出す魔法のメソッドが呼び出されます (例: csv)

これには、そのようなメソッドが応答タイプのハンドラーとして定義されている必要があります。 カスタム レスポンダーの作成方法については、ここで回答がありました

于 2013-04-02T16:21:49.957 に答える
0

送信ボタンは、特定のヘッダー/マイムが設定されたフォームを投稿します。respond_toコンテンツ タイプ、動詞、およびリクエストのリソース ステータスに基づいて、どのように動作するかを決定します。

詳細はこちら: ActionController::Responder < Object

于 2013-04-02T16:17:11.460 に答える
0

options ハッシュでremote: trueは、Rails に JavaScript で応答するように要求しています。

Web インスペクタを使用している場合は、[ネットワーク] タブをチェックアウトしてフォームを送信すると、http リクエスト ヘッダーで、ポスト リクエストが Accept フィールドで JavaScript をリクエストしていることがわかります。オプション ハッシュにリモート タグがない場合、フォーム送信は html を要求します。

さらに、プロジェクト ディレクトリで rake ルートを実行すると、ほぼすべてのルートが .:format キーワードで終了することがわかります。/posts(.:format)これにより、ユーザーが特定のコントローラーで潜在的に定義できる複数の形式にコントローラーが応答できるようになります。

于 2013-04-02T16:25:12.943 に答える