[ruby on rails] 跟我學之建立資料

來源:互聯網
上載者:User

標籤: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] 跟我學之建立資料

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.