データを失わずに Sinatra アプリケーションでフォームを再表示する
概要
検証が失敗した後、データを失わずにフォームを再表示しようとしています。
モデル:
class Book < Sequel::Model
plugin :validation_helpers
def validate
super
validates_presence [:title], message: 'Title is required'
end
end
作成.erb:
...
<%= erb :'partials/flash' %>
...
<form method="post" action="/books/create">
<input name="book[title]" type="text" value="<%= @book.title %>" />
<textarea name="book[description]"><%= @book.description%></textarea>
...
</form>
...
フラッシュ.erb:
<% flash.map do |f| %>
<div class="alert alert-<%= f[0] %> alert-dismissible fade show" role="alert">
<%= f[1] %>
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<% end %>
ブックコントローラー:
# display a table of books
get '/' do
@books = Book.all
erb :'books/index'
end
# display CREATE form
get '/create' do
@book = Book.new
erb :'books/create'
end
# process CREATE form
post '/create' do
begin
@book = Book.create(params[:book])
flash[:success] = "Book created."
redirect to("/") # /books/
rescue Sequel::ValidationFailed => e
flash[:danger] = @book.errors
redirect to "/create" # redisplay the form
end
end
これは機能しますが、フォームに入力されたデータは失われます。
最新のエントリを含むフォームを再表示するための推奨される方法は何ですか?
** 編集 ** Flashテンプレートを追加しました