2016-07-15 10 views
1

Wie zu einem 'erstellen' Aktionsaufruf nur JSERB-Datei und nicht neu laden Seite suchen eine fehlende Vorlage?Remote-Rails-Formular (simple_form_for)

Ich versuche, ein Buchobjekt mit Remote-Formular zu erstellen, aber die Ergebnisse der Aktion in einem solchen Fehler 'create':

Missing template books/create, application/create with {:locale=>[:en], :formats=>[:html], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :coffee, :jbuilder, :axlsx, :haml, :rabl]}.

Bücher/_form.haml (Bibliothek: @library):

= simple_form_for @book, url: library_books_path(library), remote: true do |f| 

books_controller.rb:

def index 
    @books = @library.books 
    @book = Book.new 
end 

def create 
    @book = @library.books.create(book_params) 
end 

def destroy 
    @book = Book.find(params[:book_id]) 
    @book.destroy 
end 

Bücher/create.js.erb:

$('#books_table').replaceWith('<%= j render "table", books: @books %>'); 

UPDATE:

ich Bücher/create.js.erb geändert:

<% if [email protected]? %> 
    alert("error!") 
<% else %> 
    $('#books_table').replaceWith('<%= j render "table", books: @books %>'); 
<% end %> 

In diesem Fall, wenn @book nicht gültig , js-Datei heißt gut, aber für den Fall, dass es gespeichert werden kann - es gibt immer noch Fehler über fehlende Vorlage

Antwort

1

Die remote: true Option ist n ot wird abgeholt, weil Sie :formats=>[:html] in Ihrer Fehlermeldung sehen können, NICHT :formats=>[:js] wie erwartet.

Sind Sie sicher, dass Sie jquery_ujs ordnungsgemäß in Ihrer Asset-Pipeline eingerichtet haben? Dies ist, was die remote: true Option abruft und bewirkt, dass das Formular über JS anstelle des Standard-HTML-Formats übermittelt wird.

Überprüfen Sie Ihre /app/assets/javascript/application.js Datei

Sie müssen haben:

manifestieren

//= require jquery //= require jquery_ujs

in Ihrem Ritzel.

+0

Beide Elemente (jquery & jquery_ujs) sind bereits in application.js enthalten – Zelenka

+0

Bitte sehen Sie meine aktualisierte Frage – Zelenka