rails access view name внутри частичного - PullRequest
12 голосов
/ 13 января 2012

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

Я думал о создании javascript-файла для конкретной страницы, который бы искал div и скрывал его.

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

Кто-нибудь знает способ сделать это внутри частичного

Ответы [ 4 ]

17 голосов
/ 13 января 2012

Хотя ответ @ wahaj будет работать, если вы хотите сделать то, что вам нужно, в центральном месте, вы можете проверить переменные controller_name и action_name в частичном, чтобы определить, в каком виде вы находитесь (например, controller_name == "services" и action_name == "show" сообщат вам, что вы находитесь в представлении «Показать» для контроллера службы)

6 голосов
/ 14 ноября 2012

вы можете получить имя текущего рендеринга из метода Helper с помощью следующего:

controller.view_context.view_renderer.instance_variable_get('@_partial_renderer').instance_values['path']
2 голосов
/ 13 января 2012

Вы можете отправить параметр стиля как локальную переменную в партиал, варьируя параметр в зависимости от того, откуда вы звоните. Что-то вроде:

render :partial => 'xyz', :locals => {:style => 'display:none or display:block'}

и в частичном вы можете сделать:

<div style=<%=style%>></div>
1 голос
/ 13 января 2012

простое решение, внутри вашей частичной проверки, если вам нужно показать частичное или нет

_partial_name.html.erb

<%= content_tag :div, :style=> "display : #{show_div? ? 'block' : 'none'}" do%>
  html...or other stuff
 <%end%>

, а затем в приложении helper

app/helper/application_helper.rb

def show_div? #you can set name of your div like 'show_sidebar_div?'
  #decide either show this div or not
 action_name == 'show'
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...