Action Controller Helper Method

February 23, 2012

Долгое время мне казалось очевидным что, для того чтобы метод контроллера объявить хелпер методом необходимо сначала определить метод, а потом передать его имя в helper_method:

class ApplicationController < ActionControllerBase
  def current_user
    @current_user ||= User.find_by_id(session[:user_id])
  end
  helper_method :current_user
end

Однако можно объявлять метод хелпером до его конкретной имплементации.

class ApplicationController < ActionControllerBase
  before_filter :authenticate!
  helper_method :current_user
  # ...

  def current_user
    @current_user ||= User.find_by_id(session[:user_id])
  end
end

Это более красиво выносить фильтры, хэлпер методы и другие служебные объявления в начало класса. Я нашел эту особенность в реализации данного метода, а также есть соответствующий пример в документации.

Если же вернуться от рейлс к руби, то, например, метод можно сделать приватным только после его объявления:

class A
  private :some # <--- EXCEPTION: undefined method `some' for class `A'

  def some
    puts "some"
  end
end

class B
  def another
    puts "another"
  end

  private :another # Ok!
end
comments powered by Disqus