Ответ 1
попробуйте следующее:
<%= render :partial => '/memory_books/new', :locals => {:fbookupload => "yes"} %>
Я видел пару вопросов по этому вопросу, но не смог их решить...
Я пытаюсь передать параметр при рендеринге частичного (аналогично 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' %>
так что я рендеринг это в рендере.
попробуйте следующее:
<%= render :partial => '/memory_books/new', :locals => {:fbookupload => "yes"} %>
Вывод из комментариев для потомков. Этот синтаксис верен:
render '/memory_books/new', fbookupload: "yes"
Но если есть ссылка на рендеринг одного и того же частица без указания локальных переменных, например
render '/memory_books/new'
тогда переменная fbookupload
становится недоступной. То же самое относится к нескольким локальным переменным, например.
render 'my_partial', var1: 'qq', var2: 'qqq'
будет работать, если произойдет только один раз. Но если в коде есть что-то еще в коде
render 'my_partial', var1: 'qq'
тогда var2
станет недоступным. Перейти фигурой...
Парамс - это просто параметр запроса, поэтому, если вы хотите передать его в параметрах u, добавьте его в свой url ?fbookupload=yes
или назначьте его params[:fbookupload] = "yes"
, но я не думаю, что это хорошая идея.
Но если вам нужно использовать params[:fbookupload]', u can replace it with
params [: fbookupload] || fbookupload 'и передать fbookupload в хеш файле locals для частичного.
Чтобы сделать это по-своему:
В главном представлении:
<% fbookupload = "yes" %>
<%= render :partial => '/memory_books/new', :locals => {:fbookupload => fbookupload} %>
И в частичном:
<%= fbookupload %>
Вторая опция:
В идеале в контроллере, в противном случае в представлении, укажите переменную экземпляра: @fbookupload = "yes"
. Тогда он доступен везде. Тогда частичное будет: <%= @fbookupload %>
Уже ответил, но для подтверждения этого работает с рельсами 5.2:
частичный вызов:
<%= render partial: 'some_partial', locals: { value: 'some_value' } %>
Вам нужно явно добавить partial
, иначе это не сработает.
В самой части вы получаете доступ как local variable
, так что это имеет место: value == 'somevalue'
.
Проверьте рельсы документации о частичных рендерерах.