使用Rails上的ujs通过远程方法显示表单的消息

时间:2013-09-02 00:08:46

标签: ruby-on-rails ruby-on-rails-3 remote-forms

我关注了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 %>

1 个答案:

答案 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 %>