@Fly3110
web developer

Как в Rails, в классе-родителе, определить константу, чтобы значение было разным для «детей»?

Собственно, вопрос в заголовке.

Я хочу определить константу LOG_TAG в ApplicationController, но так, чтобы в контроллерах, которые от него наследуются, ее значение бы вычислялось для каждого контроллера.

То есть:

application_controller.rb:
class ApplicationController < ActionController::Base
  TAG = name
end


users_controller.rb:

class UsersController < ApplicationController
  def check_const
    puts TAG
  end
end


Я хочу, чтобы вывелось UsersController, а выводится ApplicationController.

Можно сделать так, как я хочу, или нет?
Я знаю, что можно определить метод в ApplicationController, но хочется именно константой.

Спасибо
  • Вопрос задан
  • 74 просмотра
Решения вопроса 1
@GeneAYak
можно использовать хук наследования и устанавливать константу динамически в каждом классе, который наследуется от родителя

class ApplicationController
  def self.inherited(child_class)
    const_set("TAG", child_class.name)
  end
end

class UsersController < ApplicationController
  def check_const
    puts TAG
  end
end

UsersController.new.check_const # => UsersController
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
etspring
@etspring
Начитанное быдло
Увы нельзя, но можно отдавать разные значения для разных источников вызова и это уже будет метод, а не переменная
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы