Я пытаюсь получить доступ к переменной экземпляра, которая установлена в контроллере в модели. Контроллер является контроллером продуктов, и модель является моделью продуктов. Переменная экземпляра является экземпляром другой модели, названной учетной записью.
Переменная экземпляра @current_account
Когда я выполняю код, ничего не происходит, я не получаю ошибку. Кто-либо знает, где я могу найти что-то чтением о наборе переменных экземпляра доступа в контроллере из модели?
Спасибо
Eef
Обычно вам не следует пытаться получить доступ к контроллеру из модели из-за серьезных проблем, в которые я не буду вдаваться.
Я решил аналогичную проблему следующим образом:
class Account < ActiveRecord::Base
cattr_accessor :current
end
class ApplicationController < ActionController::Base
before_filter :set_current_account
def set_current_account
# set @current_account from session data here
Account.current = @current_account
end
end
Затем просто войдите в текущую учетную запись с помощью Account.current
Я не уверен, правильно ли я понимаю вопрос, но я возьму удар.
Я думаю, что если вам нужно получить доступ к переменной экземпляра контроллера из модели, вам нужно либо сделать ее атрибутом в модели, либо перенести логику на другой контроллер класса, а не в модель.
Если вам нужно для доступа к переменной контроллера из модели, это обычно означает, что ваш дизайн неправильный, потому что контроллер служит мостом между представлением и модель (по крайней мере, в Rails), контроллер получает информацию от моделей, модели не должны ничего знать о контроллерах, но если вы все равно хотите это сделать, вы можете сделать это так, как сказал Джим, но я бы предпочел:
class << self
attr_accessor :current
end
вместо
cattr_accessor :current
вы можете понять, почему здесь => cattr_accessor не работает должным образом
Я не могу комментировать напрямую, поэтому опубликую здесь: принятый ответ кажется неправильным. Как отмечает @vise, переменные класса совместно используются в запросах. Поэтому, если для всего приложения не будет только одна текущая учетная запись, это не будет вести себя так, как ожидалось.
Дополнительную информацию см. В принятом ответе @molf здесь: Rails не имеет общего доступа или могут отдельные запросы обращаться к одним и тем же переменным времени выполнения?