如何制作'创建'动作只调用js.erb文件,而不是重新加载页面找不到模板?
我尝试使用远程表单创建图书对象,但该操作会创建'导致这样的错误:
if (hei == null || wei == null || hei.equals("") || wei.equals("")){
// your body here
}
books / _form.haml(library:@library):
Missing template books/create, application/create with {:locale=>[:en], :formats=>[:html], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :coffee, :jbuilder, :axlsx, :haml, :rabl]}.
books_controller.rb:
= simple_form_for @book, url: library_books_path(library), remote: true do |f|
书籍/ create.js.erb:
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
更新
我改变了books / create.js.erb:
$('#books_table').replaceWith('<%= j render "table", books: @books %>');
在这种情况下,当<% if !@book.valid? %>
alert("error!")
<% else %>
$('#books_table').replaceWith('<%= j render "table", books: @books %>');
<% end %>
无效时,js文件被称为罚款,但如果可以保存 - 仍然有关于丢失模板的错误
答案 0 :(得分:1)
remote: true
选项未被选中,因为您可以在错误消息中看到:formats=>[:html]
,而不是:formats=>[:js]
预期。
您确定在资产管道中正确设置了 jquery_ujs 吗?这就是选择remote: true
选项,并使表单通过JS而不是默认的HTML格式提交。
检查您的/app/assets/javascript/application.js
文件
你需要:
//= require jquery
//= require jquery_ujs
在您的Sprockets清单中。