2015-06-28 1 views
2

У меня есть form_tag для отправки электронной почты, и я хочу использовать AJAX, так что только форма может обновляться, а остальное будет выглядеть одинаково.Rails Form_Tag Ajax Format.js ActionController :: UnknownFormat

contact.html.erb

<%= form_tag(site_contact_path, remote: true, class: 'response form-horizontal', authenticity_token: true) do %> 
     <h2 class="contact-title">Parašykite mums</h2> 
     <div class="form-group"> 
      <label class="control-label col-sm-4" for="name">Vardas</label> 
      <div class="col-sm-8"> 
      <%= text_field_tag 'name', nil, placeholder: 'Įveskite vardą', class: 'form-control', autocomplete: 'on' %> 
      </div> 
     </div> 

     <div class="form-group"> 
      <label class="control-label col-sm-4" for="email">El. paštas</label> 
      <div class="col-sm-8"> 
      <%= text_field_tag 'email', nil, placeholder: 'Įveskite el.paštą', class: 'form-control', autocomplete: 'on' %> 
      </div> 
     </div> 

     <div class="form-group"> 
      <label class="control-label col-sm-4" for="comment">Komentarai</label> 
      <div class="col-sm-8"> 
      <%= text_area_tag 'comment', nil, placeholder: 'Jūsų komentaras', class: 'form-control', autocomplete: 'on', rows: '6' %> 
      </div> 
     </div> 
     <%= hidden_field_tag :authenticity_token, form_authenticity_token %> 
     <div class="button-holder"> 
      <%= submit_tag 'Siųsti', class: 'submit' %> 
     </div> 
     <div class="hidden"> 
      <p>Ačiū! (Mes pasistenksime atsakyti Jums, kuo greičiau)</p> 
     </div> 
    <% end %> 

routes.rb

post '/contact' => 'site#contact_send_email' 

site_controller.rb

def contact_send_email 
@name = params[:name] 
@email = params[:email] 
@comment = params[:comment] 

ContactMailer.send_message(@name, @email, @comment).deliver 

respond_to do |format| 
    format.js 
end 
end 

contact_send_email.js.erb

$('.form-group').hide(); 
$('.button-holder').hide(); 
$('.hidden').show(); 

журнал

ActionController::UnknownFormat (ActionController::UnknownFormat): app/controllers/site_controller.rb:24:in `contact_send_email' 

При нажатии на кнопку отправки, электронный адрес отправить, но это, кажется, contact_send_email действие не может найти contact_send_email.js.erb по какой-то причине или не понимает format.js Я попытался найти аналогичную проблему в StackOverflow, но решения, похоже, не оказали никакого эффекта.

ответ

3

В вашей форме_tag измените первый параметр site_contact_path на contact_path. изменить также линию на маршрутах в:

post '/contact' => 'site#contact_send_email', defaults: { format: 'js' } 

Это должно исправить вашу проблему.