2011-02-16 11 views
0

我正在使用Ruby on Rails 3和I was advised@user is a global variable, you can't 'localize' it. I would suggest passing local variables from your controller in the same way.)在視圖文件中使用諸如user而不是@user之類的變量。 爲什麼要這樣做呢?在'html.erb'文件中使用'@user'來使用'user':如何以及爲什麼?

所以,我正考慮從使用@user到使用user。從使用

@user.name 

使用

user.name 

此時,例如,在我的控制器的顯示方法是,(在html.erb文件)我有:

def show 
    @user = Users.find(1) 
    ... 
end 

我必須改變控制器才能在視圖中工作嗎?

+0

這是無意義的,只有instance_variables從控制器發送到視圖。 – apneadiving 2011-02-16 19:04:06

+0

Nikita Rybak(http://stackoverflow.com/users/330565/nikita-rybak)在他的回答中出錯了(http://stackoverflow.com/questions/5020553/trouble-on-rendering-a-template-passing-一個本地變量)? – user502052 2011-02-16 19:06:06

回答

1

這只是您在多個控制器的視圖中調用相同部分時需要擔心的問題。

有一個部分使用@user(很可能在user_controller中設置),意味着當您從某個其他控制器(例如accounts_controller)的視圖中調用該部分時,該部分不會將@users設置爲您會得到一個錯誤。如果僅引用局部變量,則可以根據需要從任何控制器中使用所描述的locals散列來設置它們。

1

這是無意義的,只有instance_variables從控制器發送到視圖。

尼基塔Rybak的並沒有錯,在他的回答,他只是通過了包含在他看來(@current_user)的實例變量的部分地方有不同的名稱(user):

:locals => { :user => @current_user } 

他總結得非常好:

局部變量是本地的,所以你不需要@來引用它們。

事實上,你有兩個選擇與部分工作時:

  • 假設它可以訪問實例變量(不建議)

  • 實例變量傳遞給部分與本地名稱是Rails的方式

0

看看這個Rails Best Practice。使用局部變量是渲染偏好(以_開頭的那些視圖文件)時的首選方式。這是因爲您需要檢查控制器的代碼以瞭解實例變量。

相關問題