2012-01-13 2 views
10

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

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

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

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

ответ

16

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

+6

params [: controller] или params [: action] не рекомендуется, вместо этого используйте 'имя_контроллера', 'action_name' – Naveed

+1

Вау, я чувствую себя идиотом. Даже не знал, что существует. Спасибо что подметил это! – jhdavids8

+1

Лучше отредактировать исходный ответ, чтобы отразить это, или люди могут делать то, что вы сказали первоначально. –

2

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

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

и парциальное вы могли бы сделать:

<div style=<%=style%>></div> 
+1

или, возможно, местный var 'hide_div'. Определенная часть с частичными? метод, что означает, что переменная не требуется для всех вызовов для частичного отображения. –

1

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

_partial_name.html.erb

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

, а затем в помощнике приложений

приложение/помощник/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 
6

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

controller.view_context.view_renderer.instance_variable_get('@_partial_renderer').instance_values['path'] 
Смежные вопросы