Как передать значения между методами контроллера - PullRequest
7 голосов
/ 01 марта 2010

Есть ли способ разделить массив между методами контроллера и сохранить его до перезагрузки страницы или вызова метода другого контроллера? Некоторые методы должны изменить массив.

Ответы [ 3 ]

6 голосов
/ 01 марта 2010

вы можете использовать кеш рельсов.

Rails.cache.write("list",[1,2,3])
Rails.cache.read("list")
5 голосов
/ 01 марта 2010

Если вы хотите поделиться значением между методами одного и того же экземпляра контроллера, тогда объявить переменную экземпляра:

class BarsController < UsersController

  before_filter :init_foo_list

  def method1
    render :method2
  end 

  def method2
    @foo_list.each do | item|
      # do something
   end
  end

  def init_foo_list
    @foo_list ||= ['Money', 'Animals', 'Ummagumma']
  end

end

Если вы хотите разделить значение между двумя контроллерами во время сеанса, то:

class BarsController < UsersController

  before_filter :init_foo_list

  def method1
    render :controller => "FoosController", :action => "method2"
  end 

  def init_foo_list
    params[:shared_param__] ||= ['Money', 'Animals', 'Ummagumma']
  end    
end

class FoosController < UsersController

  def method2
    params[:shared_param__].each do | item|
      # do something
   end
  end
end

Дайте уникальное имя общему ключу параметра, чтобы избежать конфликта с существующими ключами.

Другой вариант - сохранить общий массив в сеансе и удалить его до окончательного рендеринга.

2 голосов
/ 03 августа 2012

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

например:

@pages=Post.find.all`

@@my_value=@pages.(any manipulations)

теперь @@my_vales можно использовать в любых действиях этого контроллера.

надеюсь, это поможет ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...