Один экземпляр класса выбрасывает весь контроллер - PullRequest
0 голосов
/ 06 июня 2010

У меня другой класс и контроллер. и мне нужно, чтобы один экземпляр модели был доступен в контроллере / сейчас я делаю что-то вроде этого:

def method1
    inst = @MyClass.new(params)
    inst.action
    ....
def method2
    inst = @MyClass.new(params)
    inst.action
    ....

но я хочу что-то вроде этого

def method1    
     @inst.action
    ....
def method2
     @inst.action

или «я». Не имеет значения

как я могу это сделать?

def self.inst
    MyClass.new(params)
end

не работает ...

Ответы [ 2 ]

1 голос
/ 06 июня 2010

Вы можете использовать обратный вызов before_filter.

Вот как вы его используете


 class YourController < ApplicationController

   before_filter :find_resource 

   def action1
      @some_instance.magic
   end

   def action2
     @some_instance.magic
   end

  private
   def find_resource
      @some_instance = YourModel.find
   end

 end

Вы также можете указать действия, с которыми выполняется обратный вызов: only или: кроме параметров

НТН

0 голосов
/ 06 июня 2010

Похоже, вы не знаете, когда использовать переменные экземпляра.

В первой части вашего кода вы говорите

inst = @MyClass.new(params)
inst.action

Это захват объекта, хранящегося в переменной экземпляра @MyClass, вызов new для него и сохранение результата that в локальной переменной inst.

Но когда вы хотите сделать @inst.action во втором наборе кода, вы полагаетесь на @inst, возвращаемый методом self.inst, который является методом, а не переменной экземпляра. Более того, метод self.inst больше не обращается к переменной экземпляра @MyClass - он обращается к константе с именем MyClass.

Я думаю что вы хотите, из того, что вы написали, это:

def inst
  @MyClass.new(params) # access instance variable
end

def method1
  inst.action  # call a method that access the instance variable, then call `action` on that
  # or `self.inst.action` would be equivalent
  # ...
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...