Как мне получить, чтобы этот пост Rails 3 AJAX (JQuery) правильно отвечал на успешное сохранение? - PullRequest
0 голосов
/ 03 февраля 2011

У меня проблемы с моим самым первым микро-приложением AJAX + Rails 3.Я не кодировал JS около 10 лет, поэтому я совершенно не разбираюсь в JQuery и т. Д.

Вот метод на контроллере

def create
  @prospect = Prospect.new(params[:prospect])
  if @prospect.save
    logger.info "seems to save"
  else
    logger.info "does not save"
  end
  @prospects = Prospect.all
end

Вот вывод из журнала

Started POST "/prospects" for 127.0.0.1 at 2011-02-03 11:29:29 -0500
  Processing by ProspectsController#create as JS
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"qzHvz5uBbmF8JIns1YAt4HlXyb34LWxbsIzZprnMeXM=", "email"=>"zach@zach.zach", "body"=>"here you go: ford.ca, america.com\n"}
does not save
  Prospect Load (0.7ms)  SELECT "prospects".* FROM "prospects"
Rendered prospects/create.js.erb (0.4ms)
Completed 200 OK in 93ms (Views: 23.7ms | ActiveRecord: 0.7ms)

Обратите внимание на две вещи: 1. «не сохраняет» выводится в журнал 2. создается файл create.js.erb.

Первая проблема заключается в том, что, хотя он регистрирует «не сохраняет», он фактически сохраняет.Я могу вытащить эту информацию на отдельной странице.

Вторая проблема заключается в том, что create.js.erb содержит только следующее:

$(alert('in create');)

Это предупреждение неслучиться.

Так что я, должно быть, что-то делаю не так в своей форме, в моем запросе AJAX или в файле create.js.erb.Моя форма:

<%= form_for(Prospect.create, :name => "pros", :remote => true) do |f| %>
    <%= f.label :email, "Your email (we'll be good)" %>
    <%= f.text_field :email, :name => "email" %>
    <%= f.label :body, "Your comment" %>
    <%= f.text_area :body, :name => "body" %>
    <%= image_submit_tag("signup.png", :id => "image_submit_button") %>
<% end %>

И мой JS:

$.ajaxSetup({
        beforeSend: function(xhr) {
            xhr.setRequestHeader("Accept", "text/javascript");
        },
            cache: false
            });


$(function() {
        $('#image_submit_button').click(function(){
                alert('yarrrrrrr');
                $.ajax({
                        data:
                        { prospect: {email: $("#prospect_email").val(), body: $("#prospect_body").val()} },
                            url: '/prospects',
                            type: 'POST',
                            dataType: 'json',
                            success: function(response)
                            {
                                // $('div-you-want-to-replace').replaceWith('<div>Holy shit dude, you are teh awesome</div>');   
                                alert('it works captian');
                            },
                            error: function(xhr, ajaxOptions, thrownError) {
                            alert('noooo');
                        }
                    });

            });
    });

Обратите внимание, что я НЕ получаю предупреждение "он работает капитаном" из моего AJAX POST, я получаю "nooooo",Так что я тоже явно что-то не так делаю.

Итак, 3 вопроса:

  1. Что мне нужно сделать, чтобы мой контроллер понял, что @prospect экономит?
  2. Что я должен сделать, чтобы создать create.js.erb, когда он это делает?(Я предполагаю, что именно здесь я должен получить всплывающее окно с благодарностью потенциальному клиенту за комментарии)
  3. Что я должен сделать, чтобы мой код AJAX не выполнял предупреждение об ошибке при успешной публикации?

1 Ответ

1 голос
/ 30 сентября 2011

Не уверен, что здесь ваша проблема, но этот код:

<%= form_for(Prospect.create, :name => "pros", :remote => true) do |f| %>

уже сохраняет перспективу из-за Prospect.create. Может быть, вы могли бы поставить Prospect.new.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...