[053]Ruby on Rails學習筆記(5) -Add second model

前言

在前面四篇學習筆記中,提到了article的新增、建立、刪除、編輯、顯示,接下來,

則是談到在每篇文章中,都有可以留言的功能,意味著一個文章可以有多篇留言,

簡單來說,是一種階層關係,所以,本篇就來討論,加入留言功能後,的實作流程。

6.Add a second model

首先在command line中輸入:

$ bin/rails generate model Comment commenter:string body:text article:references

關鍵在於,“article:references”,把model Article 與 model Comment做關聯,因此會在model/comment.rb

會看到這行“belongs_to:article”,甚至在資料庫中還看到這行:

t.references:article, index:true

接著去,執行migration動作。

6.2關聯模型

在model Article中,加入有很多comments的指令

classArticle < ActiveRecord: :Base

has_many:comments

validates:title, presence:true,

length: { minimum:5}

end

接著去把Route加入與comment的連接,

resources: articles do

resources:comments

end

建立好model、資料庫、Route後,接著往controller著手!

因為留言功能通常是在檢視玩文章,然後去留言板進行新增、刪除的功能,

所以不管是新增、刪除後,兩者執行完,都得回到 article/show,html.erb的畫面,

因此,在上述檔案中加入這些:

Add a comment:

<%= form_for([@article, @article.comments.build]) do |f| %>

<%= f.label :commenter %>

<%= f.text_field :commenter %>

<%= f.label :body %>

<%= f.text_area :body %>

<%= f.submit %>

<% end %>

在article新增一comment是透過Comment的controller中的creat action建立,

而這裡的form_for 使用到一個建立nest route的陣列,就像articles/1/comments

於是在Comment controller加上

def create

@article=Article.find(params[:article_id])

@[email protected](comment_params)

redirect to article_path(@article)

end


private

   def comment_params

       params.require(:comment).permit(:commenter, :body)

   end

與Article controller對照


[053]Ruby on Rails學習筆記(5) -Add second model_第1张图片
app/controller/articles_controller.rb

不僅是add comment,同時也得在view中顯示 comment的成果,

像是

Comments

<% @article.comments.each do |comment| %>

Commenter:

<%= comment.commenter %>

Comment:

<%= comment.body %>

<% end %>

最後可以完成,新增留言板、顯示留言板的功能!
ps.有引用的,代表自己不熟悉的,得再反復琢磨。

你可能感兴趣的:([053]Ruby on Rails學習筆記(5) -Add second model)