Rails 3 form_for: remote => true не отправляет через AJAX - PullRequest
3 голосов
/ 26 ноября 2011

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

обновление

Эта форма существует в другой форме, которая не AJAXified или не связана? Это вызвало бы проблему?

Ошибка, которую я получаю

ArgumentError в LinkWidgetsController # create

Не было макета по умолчанию для LinkWidgetsController в [/ Пользователи / victorstan / Сайты / портрет / приложение / просмотров, /Users/victorstan/.rvm/gems/ruby-1.9.2-p290@portrait/gems/devise-1.5.1/app/views]

Соответствующий код:

1019 * маршруты * resources :profiles do resource :link_widgets #this handles the form requests for create member do get 'new_link_widget' #this handles the form requests for new end resources :pages end * * Контроллер тысяча двадцать-один * * тысяча двадцать-дв class LinkWidgetsController < ActionController::Base before_filter :authenticate_user! load_and_authorize_resource def create @link_widget = LinkWidget.new(params[:link_widget]) respond_to do |format| if @link_widget.save format.js { render :js => @link_widget, :status => :created, :layout => !request.xhr? } else logger.debug @link_widget.errors.inspect format.js { render :js => @link_widget.errors, :status => :unprocessable_entity } end end end end частичная

%hr
= form_for [@profile, @link_widget], :remote => true, :format => :js do |f|  
  .field
    = f.label :provider
    = f.select(:provider, options_for_select(f.object.providers, f.object.provider))
  .field
    = f.label :link
    = f.text_field :link, size: 37, class: 'input-width'
  .field
    = f.label :title
    = f.text_field :title, size: 37, class: 'input-width'
    %div
      %small.form-help-text If you set an optional title, it will show up beside the icon as a link
  .field
    = f.label :order
    = f.text_field :order, size: 2
  - unless f.object.new_record?
    .field
      = f.label :delete
      = f.check_box :_destroy
  = f.hidden_field :profile_id
  .actions
    = f.submit 'Save', class: 'right'
  .clear

1 Ответ

2 голосов
/ 26 ноября 2011

Если я понимаю, что вы подразумеваете под This form exists within another form, у вас есть вложенные теги форм (что-то вроде следующего):

<form> <!-- this is a standard form -->
    ...
    <form> <!-- this is the remote/AJAXified form -->
        ...
    </form>
    ...
</form>

Спецификация HTML не допускает вложение тегов формы. Вы должны переместить внутреннюю форму в другое место в вашем документе. Если это невозможно, вы можете попробовать использовать две кнопки отправки внутри одной формы, а затем предпринять соответствующие действия в зависимости от того, какая кнопка была нажата (это можно сделать на сервере).

...