Как передать некоторые параметры в метод рендеринга по умолчанию? - PullRequest
6 голосов
/ 07 сентября 2011

Я использую Ruby on Rails 3.0.10, и я хотел бы передать некоторые параметры в метод рендеринга по умолчанию.То есть, если у меня есть код, подобный

def show
  ...

  respond_to do |format|
    format.html # This, by default, renders the 'show.html.erb' file
   end
end

, я хотел бы передать некоторые параметры, например, например (примечание: следующее не работает)

def show
  ...

  respond_to do |format|
    # Here I would like to add some local objects that will be available in the 'show.html.erb' template file
    format.html { render ..., :locals => { :content => { :value => 'Sample value' } } }
   end
end

, чтобы вшаблон show.html.erb, который я могу сделать что-то вроде:

<%=
  content[:value]
  # => 'Sample value'
%>

В нескольких словах Я бы хотел передать значения параметров так же, как это было сделано для частичной визуализации шаблона, связанной с :localsключ :

render :partial, 
       :locals => {
          :content => { :value => 'Sample value' }
       }

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

Ответы [ 3 ]

6 голосов
/ 07 сентября 2011

Вы можете сделать именно то, что вы описали. Я посмотрел его здесь http://apidock.com/rails/ActionController/Base/render под заголовком «Рендеринг шаблона» и сам его обернул. Вы узнаете что-то новое каждый день.

Вы можете просто сделать

def show
  respond_to do |format|
    format.html { render :locals => { :content => { :value => 'Sample value' } } }
  end
end

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

3 голосов
/ 07 сентября 2011

Как насчет установки переменной экземпляра ?

# your_controller.rb

def show
  @content_value = ...
end

# show.html.erb

<%= @content_value %>
1 голос
/ 07 сентября 2011

Обычно, когда мы работаем с действиями show.html.erb - это представление action, а не partial, мы передаем параметры через переменные экземпляра на контроллере, такие как

def show
  ...
  @foo = "bar"
  respond_to do |format|
    format.html
   end
end

Теперь в файле app/views/foos/show.html.erb у нас есть доступ к @foo.

При рендеринге партиалов есть несколько способов передачи параметров:

По умолчанию будет отображаться app/views/foos/_foo.html.erb, поскольку он знает, что @foo имеет тип Foo. В нем у вас будет доступ к переменной foo автоматически.

<%= render @foo %>

Здесь мы отрендерим app/views/foos/_foo_details.html.erb и передадим объект. Объект принимает имя частичного, поэтому внутри _foo_details.html.erb у нас будет доступ к переменной с именем foo_details.

<%= render :partial => "foo_details", :object => @foo %>

Наконец, и, главным образом, в связи с вашим вопросом, мы отрендерим партиал с именем _foo_things.html.erb и передадим его некоторым местным жителям. В этом случае вы получите локальную переменную с именем title, с которой вы можете работать.

<%= render :partial => "foo_things", :locals => {:title=> "Test 123"} %>

Надеюсь, это ответит на ваш вопрос.

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