2011-05-06 36 views
3

在一個最佳實踐的世界中,您何時讓視圖繼承控制器的實例變量,以及何時將它們明確地傳入到本地哈希中?關於視圖如何獲得變量

+0

即使視圖和從該視圖調用的部分將有權訪問控制器中設置的實例變量,我將局部變量傳遞給局部變量,以使局部變量「像一個帶有參數的自包含方法」。當我需要從一個完全不同的控制器渲染該部分時,我知道該部分不依賴於任何其他變量,而不是以本地方式傳遞給它的其他變量。 – Zabba 2011-05-06 15:59:27

回答

5

你在你的控制器定義會自動傳播到視圖的任何實例變量,所以沒有必要明確地傳遞他們進來。這不僅適用於您的初始視圖,還適用於流程中呈現的任何部分。

當您調用相同的部分時,您需要發送:locals變量,但需要它呈現不能通過:object:collection不能容納的其他內容。

這裏是不恰當地使用實例變量的例子:

# Bad form 
<%- @foo = 'example1' %> 
<%= render(:partial => 'bar') %> 
<%- @foo = 'example2' %> 
<%= render(:partial => 'bar') %> 

一個更好的辦法是這樣的:

<%= render(:partial => 'bar', :locals => { :foo => 'example1' }) %> 
<%= render(:partial => 'bar', :locals => { :foo => 'example2' }) %> 

不同的是,你會看到變量部分爲foo,而不是@foo。請記住,局部變量可能是未定義的,除非它們被傳入,否則可能會造成麻煩,因此請仔細測試。

0

好的做法是在控制器中設置變量。

你不應該從位指示傳給他們,因爲他們將是可見的自動

#your_controller 
@name = "Pedro" 

#your view 
Hello, <%= @name %>!