標籤:style blog http io ar os 使用 sp java
通過form來建立資料,本章節將會涉及內容:建立form,使用者重導向,渲染views 和 flash訊息。
1. views初步
編輯 app/views/posts/index.html.erb這個view檔案,如下:
<% @posts.each do |post| %> <h2><%=link_to post.title,post%></h2> <%=post.context%><br/><hr/><% end %><p><%= link_to "Add a post", new_post_path %></p>
new_post 是 new動作的prefix,參考[ruby on rails] 跟我學之路由映射,但在其後面添加了_path尾碼。
然後編輯app/views/posts/new.html.erb這個view檔案,如下:
<h1>Add a new post</h1>
2. 綁定到對象
問題來了,怎麼綁定到對象?
解決方案是先建立一個空的對象,修改new 動作,如下:
def new @post = Post.new end
然後view檔案就可以使用它了,修改app/views/posts/new.html.erb檔案,如下:
<h1>Add a new post</h1><%= form_for @post do |f| %> <p> <%= f.label :title%><br/> <%= f.text_field :title%> </p> <p> <%= f.label :context%><br/> <%= f.text_area :context%> </p> <p> <%= f.submit "New Post"%> </p><% end %>
使用label顯示欄位名稱, 由於context(content)是text類型,所以用text_area顯示比較好。注意 form_for方法。
3. 實際的儲存
實際儲存是由create進行的,修改create動作如下,
儲存成功,則跳轉到index頁面,否則停留在new頁面,具體代碼如下:
def create @post = Post.new(post_params) if @post.save redirect_to posts_path, :notice=>"Your post was saved" else render "new" end end private def post_params params.require(:post).permit(:title,:context) end
其中:
1. 需要添加強型別的支援,
post_params屬於強型別。會猜測傳進來的參數裡有哪些東東,允許哪些東東,性質上有點類似介面。
有興趣瞭解為什麼的話看這裡。
2.notice 屬於一個在flash訊息,需要添加對flash訊息的支援,修改全域view檔案,也就是app/views/layouts/application.html.erb如下:
<!DOCTYPE html><html><head> <title>Blog</title> <%= stylesheet_link_tag ‘application‘, media: ‘all‘, ‘data-turbolinks-track‘ => true %> <%= javascript_include_tag ‘application‘, ‘data-turbolinks-track‘ => true %> <%= csrf_meta_tags %></head><body><% flash.each do |k,v| %> <p><%=v%></p><% end%><%= yield %></body></html>
其中添加的部分是:
<% flash.each do |k,v| %> <p><%=v%></p><% end%>
注意 <%= yield %>,這個部分相當於django的 block 標籤,定義了一個容器區(placeholder),其他的頁面(index,new,edit,show)都會在這個地區進行渲染。
flash訊息只是顯示一次,對於一個request來說。
最終效果如下:
轉載請註明本文來自:http://www.cnblogs.com/Tommy-Yu/p/4141518.html,謝謝!
[ruby on rails] 跟我學之建立資料