Ruby on Rails - переменная Контроллера доступа из модели

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

Переменная экземпляра @current_account

Когда я выполняю код, ничего не происходит, я не получаю ошибку. Кто-либо знает, где я могу найти что-то чтением о наборе переменных экземпляра доступа в контроллере из модели?

Спасибо

Eef

19
задан RailsSon 11 March 2010 в 10:34
поделиться

4 ответа

Обычно вам не следует пытаться получить доступ к контроллеру из модели из-за серьезных проблем, в которые я не буду вдаваться.

Я решил аналогичную проблему следующим образом:

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

46
ответ дан 30 November 2019 в 02:11
поделиться

Я не уверен, правильно ли я понимаю вопрос, но я возьму удар.

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

1
ответ дан 30 November 2019 в 02:11
поделиться

Если вам нужно для доступа к переменной контроллера из модели, это обычно означает, что ваш дизайн неправильный, потому что контроллер служит мостом между представлением и модель (по крайней мере, в Rails), контроллер получает информацию от моделей, модели не должны ничего знать о контроллерах, но если вы все равно хотите это сделать, вы можете сделать это так, как сказал Джим, но я бы предпочел:

 class << self

    attr_accessor :current

 end

вместо

cattr_accessor :current

вы можете понять, почему здесь => cattr_accessor не работает должным образом

5
ответ дан 30 November 2019 в 02:11
поделиться

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

Дополнительную информацию см. В принятом ответе @molf здесь: Rails не имеет общего доступа или могут отдельные запросы обращаться к одним и тем же переменным времени выполнения?

2
ответ дан 30 November 2019 в 02:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: