简体   繁体   中英

Pass all class methods to another function in Ruby on Rails

I have made the following validation method:

  def if_admin(&block)
       if @current_user.administrator?
           yield
       else
           redirect_to '/go_away'
       end
  end

and i find my classes are increasingly looking like:

class Foo < ApplicationsController

    def index
        if_admin do
              .....
        end
    end
    def show
        if_admin do
              .....
        end
    end
    def new
        if_admin do
              .....
        end
    end
    def edit
        if_admin do
              .....
        end
    end
    .......
end

I want to know if there is anything similar to before_action which would pass the method into the if_admin method, thus DRYing up the code?

Just like you wrote, there is before_action . You can use it like this:

class Foo < ApplicationsController
  before_action :if_admin
  # ...
  private
  def if_admin
    redirect_to '/go/away' unless @current_user.administrator?
  end
end

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM