2012-01-13 28 views
10

Tôi có một phần mà tôi đang sử dụng trong các trang khác nhau. Tôi muốn có điều kiện ẩn một div nhất định bên trong một phần dựa trên khung nhìn hiển thị nó.đường ray truy cập tên xem bên trong một phần

Tôi đã suy nghĩ về việc tạo một tệp JavaScript cụ thể của trang để tìm kiếm phần tử div và ẩn nó.

Tuy nhiên, nếu có cách để truy xuất tên chế độ xem/tên trang trong phần, nó sẽ là trung tâm của một phần và sẽ không cần tải cùng một tệp javascript vào nhiều trang.

Không ai biết một cách để làm điều này trong một phần

Trả lời

16

Trong khi câu trả lời @ wahaj của sẽ làm việc, nếu bạn muốn làm những gì bạn cần trong một vị trí trung tâm, bạn có thể kiểm tra controller_nameaction_name biến trong một phần để xác định chế độ xem bạn đang ở (ví dụ: controller_name == "services"action_name == "show" sẽ cho bạn biết bạn đang ở chế độ xem Hiển thị cho bộ điều khiển Dịch vụ)

+6

params [: controller] hoặc params [: action] không được khuyến khích, thay vào đó sử dụng 'controller_name', 'action_name' – Naveed

+1

Wow, tôi cảm thấy như một thằng ngốc. Thậm chí không biết rằng đã tồn tại. Cảm ơn bạn đã chỉ ra điều đó! – jhdavids8

+1

Bạn nên chỉnh sửa câu trả lời gốc để phản ánh điều này, hoặc mọi người có thể làm những gì bạn đã nói ban đầu. –

2

Bạn có thể gửi các thông số phong cách như là một biến địa phương để các phần, thay đổi các thông số tùy thuộc vào nơi bạn đang gọi điện thoại từ. Một cái gì đó như:

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

và trong phần bạn có thể làm:

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

hoặc có thể là var 'hide_div' cục bộ. Một nicety với partials là định nghĩa? phương pháp, có nghĩa là biến sẽ không được yêu cầu trên tất cả các cuộc gọi để hiển thị một phần. –

1

giải pháp đơn giản, bên trong một phần của bạn kiểm tra xem bạn cần phải chứng minh một phần hoặc không

_partial_name.html.erb

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

và sau đó trong ứng dụng 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 
6

bạn có thể lấy tên của phần hiện đang hiển thị từ bên trong phương thức Trình trợ giúp với:

controller.view_context.view_renderer.instance_variable_get('@_partial_renderer').instance_values['path'] 
Các vấn đề liên quan