8.コメントを削除する
コメントを削除する機能もチャチャっとつくっちゃおう。
何回もやってるけど
①ビューの編集
②コントローラ(アクション)の編集
③モデルの編集
が必要だ。
①ビューの編集
コメントを表示している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アクションに送信しているんだね。
②コントローラ(アクション)の編集
コメントコントローラにdestroyアクションを追加してあげよう。
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
パラメータで渡ってきたarticle_idでArticleを検索してる。
これはリダイレクトする用だね。
肝心のデストロイする対象は
@comment = @article.comments.find(params[:id])
ここで取ってきている。
そのあとdestroyしてるね。
8.1.関連付けられたオブジェクトも削除する
コメントを削除する機能をつけました。
コメントは記事に関連づいています。
じゃあ記事が削除された時、コメントは削除しなくていいの?
ということで
③モデルの編集
class Article < ApplicationRecord
has_many :comments, dependent: :destroy
validates :title, presence: true,
length: { minimum: 5 }
end
dependent: :destroy
ここで記事がdestroyされた時、関連づいてるコメントもdestroyされるんだって。
9.セキュリティ
9.1.BASIC認証
ほほう。
よくわかんないけど言われた通りにするか。
class ArticlesController < ApplicationController
http_basic_authenticate_with name: "dhh", password: "secret", except: [:index, :show]
def index
@articles = Article.all
end
# (以下省略)
http_basic_authenticate_with name: "dhh", password: "secret", except: [:index, :show]
これを追加することでindexとshowのページ以外は認証が必要になったらしい。
ほんまや。
ユーザー名dhh、パスワードsecretではいれる。
class CommentsController < ApplicationController
http_basic_authenticate_with name: "dhh", password: "secret", only: :destroy
def create
@article = Article.find(params[:article_id])
@comment = @article.comments.create(comment_params)
redirect_to article_path(@article)
end
# (以下省略)
コメントの削除にも認証をつけた。
今は名前とパスワードが固定だけど、アカウント機能とかつければそれっぽくなるんだろうなあ。
9.2.その他のセキュリティ対策
セキュリティは奥が深いからいろいろみてみてねだって。
勉強します<(_ _)>
おわりに
このあと10~12章があるけどコラムみたいな感じだから、
Railsをはじめよう編はここで終わり!
(ながかったあー)
これで基礎を理解できた、はず。
よーしこの調子で応用編も行っちゃうぞー。