Rails note : Require Creator

增加一個叫做Creator的別名,讓我們在判別作者時文意更加通順。

設定發文者

我們透過foreign key新增一個叫做creator的別名。作法是修改model/post.rb原本的

1
belongs_to :user

改成

1
belongs_to :creator, foreign_key: "user_id", class: "User"

原本我們要使用post.user來取得文章作者,現在可以使用post.creator來取得作者。

只有作者可以新增或修改文章

  1. 到posts controller加上before_action :require_creator, only: [:edit, :update]

  2. 在application controller中加入一個access dined的方法,這個方法的目的是「如果不是creator來新增或修改文章,就會出現錯誤訊息」。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    class ApplicationController < ActionController::Base
    .
    .
    .
    def access_denied
    flash[:error] = "You can't do that."
    redirect_to root_path
    end
    end
  3. 接著在posts controller加上剛剛使用before action驗證的方法,require_creator驗證了兩件事情,第一是你必須登入,第二則是你必須是文章的作者。

    1
    2
    3
    def require_creator
    access_denied unless logged_in? && (current_user == @post.creator)
    end

這樣子就做完發文的驗證了。

評論