分享

[Rails][notes]刪除評論與簡易的身份認證-官網閱讀紀錄[7]

記錄自己官網文件閱讀的注釋與筆記
主要也是訓練自己閱讀英文挑戰
https://guides.rubyonrails.org/getting_started.html
官網 注釋 筆記 rails

Image by meineresterampe from Pixabay


9 Deleting Comments

另一個重要的功能是刪除垃圾評論,要做這個功能我們需要給予評論一個連結
,透過這個連結來連接View 跟CommentsController 中的 destroy  action。
打開app/views/comments/_comment.html.erb
  

<p>

  <strong>Commenter:</strong>

  <%= comment.commenter %>

</p>


<p>

  <strong>Comment:</strong>

  <%= comment.body %>

</p>


<p>

  <%= link_to 'Destroy Comment', [comment.article, comment],

              method: :delete,

              data: { confirm: "Are you sure?" } %>

</p>

點擊"Destroy Comment"這個連結將觸發刪除,
透過/articles/:article_id/comments/:id 傳送到CommentsController
可以知道要刪除的評論是哪一篇
打開app/controllers/comments_controller.rb
加入destroy action
  

class CommentsController < ApplicationController

  def create

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

    @comment = @article.comments.create(comment_params)

    redirect_to article_path(@article)

  end


  def destroy

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

    @comment = @article.comments.find(params[:id])

    @comment.destroy

    redirect_to article_path(@article)

  end


  private

    def comment_params

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

    end

end

destroy action先找到評論所屬的文章,然後透過路徑找到文章下的評論
,在使用destroy把這篇評論從資料庫刪除。

9.1 Deleting Associated Objects

如果要刪除的是文章,需要將該篇的評論也一併刪除,可以透過關聯中dependent達到刪除文章時讓Rails 一併把所屬的評論刪除。
app/models/article.rb
  

class Article < ApplicationRecord

  include Visible


  has_many :comments, dependent: :destroy


  validates :title, presence: true

  validates :body, presence: true, length: { minimum: 10 }

end

10 Security

10.1 Basic Authentication

如果你想發佈你的BLOG到網路上,任何人都可以執行建立、編輯、刪除文章。
Rails 提供HTTP身份認證系統。
ArticlesController 中透過一些方法阻隔非管理者的各種操作的訪問,
這裡我們可以透過Rails 提供的http_basic_authenticate_with 方法,
來允許透過認證的訪問者進行操作這些功能。
我們可以在ArticlesController的頂部添加,打開
app/controllers/articles_controller.rb
如果如果針對非管理員可以瀏覽 index 與show 我們可以這樣使用
  

class ArticlesController < ApplicationController


  http_basic_authenticate_with name: "dhh", password: "secret", except: [:index, :show]


  def index

    @articles = Article.all

  end


  # snippet for brevity


我也希望刪除評論只有管理員可以執行,所以在
  

CommentsController (app/controllers/comments_controller.rb)添加

class CommentsController < ApplicationController


  http_basic_authenticate_with name: "dhh", password: "secret", only: :destroy


  def create

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

    # ...

  end


  # snippet for brevity

若現在你嘗試建立文章,將會被要求需要身份驗證!
官網 注釋 筆記 rails

https://guides.rubyonrails.org/getting_started.html#deleting-comments

或著你也可以添加其他流行的Rails applications. 來為你做會員系統
在gem 可以搜尋  Devise 和  Authlogic 
#官網  #注釋  #筆記  #rails 
分類:學習

評論
上一篇
  • [Rails][notes] Refactoring官網閱讀紀錄[6]
  • 下一篇
  • [Rails][notes]Active Record Basics-官網閱讀紀錄[8]
  • 更多文章
    載入中... 沒有更多了