我关注了http://railscasts.com/episodes/136-jquery-ajax-revised一集 并创建我的cusotm示例。 我将创建表单放在索引中,并通过远程方法
创建一本书但我不知道如何在页面中输入错误信息。 请给我一些例子,谢谢〜
索引
<%= render 'form' %>
<p>
<table id='books_tbl' class="table">
<th>id</th>
<th>title</th>
<th>ISBN</th>
<th>sn</th>
<th>price</th>
<th>Functions</th>
<div class="books" id="books">
<%= render @existed_books %>
</div>
</table>
控制器
# POST /books
# POST /books.json
def create
@book = Book.new(params[:book])
respond_to do |format|
if @book.save
format.html { redirect_to @book, notice: 'Book was successfully created.' }
format.json { render json: @book, status: :created, location: @book }
format.js
else
format.html { render action: "new" }
format.json { render json: @book.errors, status: :unprocessable_entity }
format.js
end
create.je.erb
<% unless @book.save %>
<% else %>
$('#books_tbl tr:last').after('<%= j render(@book) %>');
<% end %>
答案 0 :(得分:1)
首先,更改您的books_controller
,以便始终呈现create.js.erb
图书是否保留。
def create
@book = Book.new(params[:book])
respond_to do |format|
if @book.save
format.html { redirect_to @book, notice: 'Book was successfully created.' }
format.json { render json: @book, status: :created, location: @book }
else
format.html { render action: "new" }
format.json { render json: @book.errors, status: :unprocessable_entity }
end
format.js
end
end
然后,在您create.js.erb
中,您需要检查自己的图书是否为persited?
:
<% if @book.persisted? %>
# ...
<% else %>
# display the error message
<% end %>
假设我们将使用<p>
类在.errors
中显示错误消息:
$('<p>').text('<%= @book.errors.full_messages.to_sentence.capitalize %>')
.prepend('form');
问题在于,每次渲染create.js.erb
时都必须删除错误段落,以便以前的错误不会出现:
$('p.errors').remove();
总而言之,它给出了:
$('p.errors').remove();
<% if @book.persisted? %>
# ...
<% else %>
$('<p>').text('<%= @book.errors.full_messages.to_sentence.capitalize %>')
.prepend('form')
<% end %>