1

Rails で AJAX の方法でフォーム処理を解決するのに苦労しています。私が持っているさまざまな部分と、どこに疑問があるかを説明しようと思います。

これが私のnew.html.erbの外観です。

<%= simple_form_for(resource, :as => resource_name, :url => registration_path(resource_name), :remote => true) do |f| %>
  <%= f.input :email, :label => false, :placeholder => 'Enter Email' %>
  <%= f.submit "Step inside", :id => 'invitation_button' %>
<% end %>

<div id="request_invite">
</div>

ご覧のとおり、私は を持っている:remote => trueので、送信は AJAX 経由で行われます。また、送信が成功した場合に備えて、パーシャルで満たされる空のコンテナー (#request_invite) があります。

私のregistrations_controller.rb (メソッドの作成)は次のようになります。

def create
    build_resource

    if resource.save
      if resource.active_for_authentication?
        sign_in(resource_name, resource)
        respond_with resource, :location => after_sign_up_path_for(resource)
      else
        expire_session_data_after_sign_in!
        respond_with resource, :location => after_inactive_sign_up_path_for(resource)
      end
    else
      clean_up_passwords resource
      respond_with resource
    end
  end

私の疑問はここにあります。送信が成功したかどうかを JS に知らせるには、何を記述すればよいですか。_thank_you.html.erb成功した場合は、#request_invite コンテナーに呼び出されたパーシャルをレンダリングしたいと考えています。うまくいかなかった場合は、フォームにエラーを表示したいと思います。

ここに、AJAX 応答を処理する Javascript ファイルがあります。

$('document').ready(function() {
  $("#new_user").on('ajax:success', function(data, status, xhr)
  {
    alert("test");
  })
});

現在、成功したかどうかを知る方法がないため、アラート(「テスト」)が常に表示されます。

どうもありがとう、私は自分自身を十分に説明したことを願っています.

4

1 に答える 1

1

(remote: true を使用する代わりに) フォームの送信時に成功と失敗のコールバックを使用して、手動で ajax 呼び出しを行った場合はどうなるでしょうか。私は疲れていて、コントローラーのアクションであなたがやろうとしていることを正確にフォローしているかどうか確信が持てません.

  $('#form_name').submit (e) ->
    e.preventDefault()
    $.ajax
      type: "POST"
      url: "/whatever_the_path_is"
      data: { 'email': $(@).val() }
      success: (result) ->
        $('#request_invite').html(result)
      failure: ->
        $('#request_invite').html("<h1>Request Failed</h1>")

コントローラーは次のようになります。

def create
      build_resource

      if resource.save
        if resource.active_for_authentication?
          sign_in(resource_name, resource)
          # respond_with resource, :location => after_sign_up_path_for(resource)
          render partial: '/partials_folder/thank_you'
        else
          expire_session_data_after_sign_in!
          # respond_with resource, :location => after_inactive_sign_up_path_for(resource)
          render partial: '/partials_folder/there_was_an_error'
        end
      else
        clean_up_passwords resource
        respond_with resource
      end
    end

うまくいけば、これで正しい道を歩み始めることができます。

于 2013-04-22T10:57:42.280 に答える