Установка переменных класса и метода в application_controller - PullRequest
0 голосов
/ 22 марта 2012

У меня есть реальные проблемы при попытке получить current_user из устройства, определить идентификатор учетной записи отсюда, а затем передать его в качестве переменной в метод set_current_tenant_to из этого драгоценного камня: https://github.com/ErwinM/acts_as_tenant.

В моем контроллере приложения у меня есть:

class ApplicationController < ActionController::Base

  protect_from_forgery # See ActionController::RequestForgeryProtection for details      
  helper :all # include all helpers, all the time

  def get_current_account_id
    current_account_user = current_user
    current_account_id = current_account_user.account_id
    current_account_id
  end

  current_account = Account.find(get_current_account_id)
  set_current_tenant_to(current_account)

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

Routing Error

undefined local variable or method `get_current_account_id' for ApplicationController:Class

Буду очень признателен за любые советы или указания о том, как я могу заставить это работать.

Ответы [ 3 ]

0 голосов
/ 23 марта 2012

Полагаю, вам нужно создать фильтр для установки текущего арендатора.Вы должны сделать это:

class ApplicationController < ActionController::Base
  before_filter :set_tenant_to_current_account
  def set_tenant_to_current_account
    current_account = Account.find(current_user.account_id)
    set_current_tenant_to(current_account)
  end

  def set_current_tenant_to(account)
    # Your business logic here.
    @current_tenant = account
  end
end

РЕДАКТИРОВАТЬ: поместите некоторый заглушенный код метода для представления set_tenant_to

0 голосов
/ 26 марта 2012

Когда вы определяете любой пользовательский метод в контроллере приложения, вы должны вызывать его, используя

вызов.

 class ApplicationController < ActionController::Base

   before_filter :get_current_account_id


    protect_from_forgery # See ActionController::RequestForgeryProtection     
   helper :all # include all helpers, all the time

   def get_current_account_id
    current_account_user = current_user
    current_account_id = current_account_user.account_id
    set_tentant_id(current_account_id)
   end

   def set_tentant_id
    #your logic
   end
 end

Я надеюсь, что это будет работать очень чисто и хорошо .....

0 голосов
/ 22 марта 2012

Я предполагаю, что он вызывает метод уровня класса, а не метод экземпляра, поэтому вам нужно вызывать его самостоятельно.Кроме того, вам действительно не нужны все эти дополнительные переменные:

class ApplicationController < ActionController::Base
  def self.get_current_account_id
    current_user.account_id
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...