Передача параметров в рендер - Rails 3

Я видел пару вопросов по этому вопросу, но не смог их решить...

Я пытаюсь передать параметр при рендеринге частичного (аналогично domainname.com/memory_books/new?fbookupload=yes)

Прямо сейчас я использую эту строку:

<%= render :partial => '/memory_books/new', :fbookupload => "yes" %>

и частично я попытался получить содержимое fbookupload с помощью:

<%= fbookupload %>

которая выдает ошибку "неопределенная локальная переменная" и

<%= params.inspect %>

который не показывает fbookupload в качестве параметра.

Как получить частичный проход по параметру: fbookupload?

Спасибо.

UPDATE:

Может ли это иметь какое-либо отношение к тому факту, что я рендерим это внутри рендера?

то есть страница (/fbookphotos/show) с

<%= render :partial => '/memory_books/new', :fbookupload => "yes" %>

отображается другой страницей с (сообщения/шоу) через:

<%= render :partial => '/fbookphotos/show' %>

так что я рендеринг это в рендере.

Ответ 1

попробуйте следующее:

<%= render :partial => '/memory_books/new', :locals => {:fbookupload => "yes"} %>

Ответ 2

Вывод из комментариев для потомков. Этот синтаксис верен:

render '/memory_books/new', fbookupload: "yes"

Но если есть ссылка на рендеринг одного и того же частица без указания локальных переменных, например

render '/memory_books/new'

тогда переменная fbookupload становится недоступной. То же самое относится к нескольким локальным переменным, например.

render 'my_partial', var1: 'qq', var2: 'qqq'

будет работать, если произойдет только один раз. Но если в коде есть что-то еще в коде

render 'my_partial', var1: 'qq'

тогда var2 станет недоступным. Перейти фигурой...

Ответ 3

Парамс - это просто параметр запроса, поэтому, если вы хотите передать его в параметрах u, добавьте его в свой url ?fbookupload=yes или назначьте его params[:fbookupload] = "yes", но я не думаю, что это хорошая идея.

Но если вам нужно использовать params[:fbookupload]', u can replace it with params [: fbookupload] || fbookupload 'и передать fbookupload в хеш файле locals для частичного.

Ответ 4

Чтобы сделать это по-своему:

В главном представлении:

<% fbookupload = "yes" %>
<%= render :partial => '/memory_books/new', :locals => {:fbookupload => fbookupload} %>

И в частичном:

<%= fbookupload %>

Вторая опция:

В идеале в контроллере, в противном случае в представлении, укажите переменную экземпляра: @fbookupload = "yes". Тогда он доступен везде. Тогда частичное будет: <%= @fbookupload %>

Ответ 5

Уже ответил, но для подтверждения этого работает с рельсами 5.2:

частичный вызов:

<%= render partial: 'some_partial', locals: { value: 'some_value' } %>

Вам нужно явно добавить partial, иначе это не сработает.

В самой части вы получаете доступ как local variable, так что это имеет место: value == 'somevalue'.

Проверьте рельсы документации о частичных рендерерах.