Rails Ajax .post запрос не работает как надо - PullRequest
1 голос
/ 29 января 2012

Попытка реализовать форму в диалоге пользовательского интерфейса jquery.У меня есть модель «Клиенты» со стандартными действиями «Создать», «Создать обновление» и т. Д.

Для ссылки «Новый клиент» у меня есть код, который загружает форму в модальный режим, а затем позволяет мне отправитьФорма через почтовый запрос.Внутри диалогового окна у меня есть пара кнопок для отправки формы

    buttons: {"Save": function() {      
        $.post("/customers", $("#new_customer").serializeArray());
        $(this).dialog('close');},
              "Cancel": function() {$(this).dialog('close');}
    }       

Это прекрасно работает.

Однако, когда я пытаюсь выполнить репликацию для ссылки «Редактировать», она не работает.

    buttons: {"Save": function() {      
        $.post("/customers", $("#edit_customer").serializeArray());
        $(this).dialog('close');},
              "Cancel": function() {$(this).dialog('close');}
    }       

Я смотрю на маршруты рейка, на которых написано:

   customers GET    /customers(.:format) {:action=>"index", :controller=>"customers"}
             POST   /customers(.:format) {:action=>"create", :controller=>"customers"}

Итак, это потому, что EDIT не работает?Нужно ли мне создать именованный маршрут для него?Пожалуйста, дайте мне знать, что, по вашему мнению, может быть проблемой!

Мой метод создания выглядит следующим образом:

  def create
    @customer = Customer.new(params[:customer])
    if @customer.save
      redirect_to @customer, :notice => "Successfully created customer."
    else
      render :action => 'new'
    end
  end

В маршрутах.rb у меня есть:

   resources :customers do 
     resources :plans
   end 

и сгенерированные маршруты:

        customers GET    /customers(.:format)                             {:action=>"index", :controller=>"customers"}
                  POST   /customers(.:format)                             {:action=>"create", :controller=>"customers"}
     new_customer GET    /customers/new(.:format)                         {:action=>"new", :controller=>"customers"}
    edit_customer GET    /customers/:id/edit(.:format)                    {:action=>"edit", :controller=>"customers"}
         customer GET    /customers/:id(.:format)                         {:action=>"show", :controller=>"customers"}
                  PUT    /customers/:id(.:format)                         {:action=>"update", :controller=>"customers"}

У меня есть партиал с формой, которую я загружаю для новых и редактируемых методов (тот же партиал).

    <%= form_for @customer do |f| %> 
... 
<% end %> 

но в исходном коде написано:

<form accept-charset="UTF-8" action="/customers/1" class="edit_customer" id="edit_customer_1" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="✓"><input name="_method" type="hidden" value="put"><input name="authenticity_token" type="hidden" value="DpfK5tChAxY3gOT8CfKQQTS6igRUMAM4tQbCf3GeA8I="></div>

Так как мне использовать PUT от JS?

Спасибо!

1 Ответ

0 голосов
/ 29 января 2012

Если ваши клиенты определены как ресурс REST:

resources :customers

, тогда для вашего контроллера REST определены два действия

GET /customers/:id/edit(.:format) {:action=>"edit", :controller=>"users"}
PUT /customers/:id(.:format) {:action=>"update", :controller=>"users"}

Так что попробуйте $ .get вместо $ .postесли вы хотите загрузить форму клиента, и POST (PUT) для обновления.Так как браузер плохо поддерживает метод PUT, Rails эмулирует это с помощью POST-запроса, но вставляет скрытые в форму, например <input name="_method" type="hidden" value="put"> Вам не нужно делать это, если вы создаете путь формы,

form_for(@customer) do |form| ...

Затем, если вы редактируете существующего клиента, этот тег автоматически вставляется, поэтому он будет присутствовать при сериализации.

Если у вас нет ресурса REST, значит, вы пропускаете маршруты.Какую ошибку вы получаете?

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