Одна и та же переменная экземпляра для всех действий контроллера - PullRequest
11 голосов
/ 17 февраля 2012

У меня есть контроллер рельсов с двумя определенными действиями: index и show.У меня есть переменная экземпляра, определенная в index action.Код выглядит примерно так:

def index
  @some_instance_variable = foo
end

def show
  # some code
end

Как получить доступ к шаблону @some_instance_variable in show.html.erb?

Ответы [ 2 ]

56 голосов
/ 17 февраля 2012

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

class FooController < ApplicationController
  before_filter :common_content, :only => [:index, :show]

  def common_content
    @some_instance_variable = :foo
  end
end

Теперь @some_instance_variable будет доступно из всех шаблонов (включая частичные), созданных в результате действий index или show.

12 голосов
/ 17 февраля 2012

Если вы не визуализируете show.html.erb из действия index, вам также нужно установить @some_instance_variable в действии show. Когда вызывается действие контроллера, он вызывает соответствующий метод - поэтому содержимое вашего index метода не будет вызываться при использовании действия show.

Если вам нужно установить @some_instance_variable на одно и то же в действиях index и show, правильным способом было бы определить другой метод, вызываемый как index, так и show, который устанавливает переменная экземпляра.

def index
  set_up_instance_variable
end

def show
  set_up_instance_variable
end

private

def set_up_instance_variable
  @some_instance_variable = foo
end

Если метод set_up_instance_variable закрыт, он не будет вызван как действие контроллера, если у вас есть маршруты с подстановочными знаками (т. Е. match ':controller(/:action(/:id(.:format)))')

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