2009-08-28 59 views
1

我試圖在助手加入一些實例變量如下所示:在rails helpers中添加的實例變量在視圖(模板)中不可用?

module ApplicationHelper 
def title=(title) 
    @title = title 
end 

def title 
    @title 
end 
end 

,當我的意見/頁/ index.html.erb分配標題如下所示:

<% title = 'Listing Pages' %> 

和儘量展現它像的意見/佈局/ application.html.erb如下:

<%= title %> 

它顯示爲「」和一些調試後,貌似@title不爲S.等。

爲什麼助手中添加的實例變量在視圖(模板)中不可用?

在此先感謝。

+1

僅供參考,您可以使用attr_accessor實現在同一行的getter和setter。 – 2009-08-28 18:53:10

回答

2

我的猜測是,Ruby的認爲,你在做什麼在

title = 'Listing Pages' 

是分配給一個局部變量title

嘗試用self前綴它,看看它是否幫助:

self.title = 'Listing Pages' 
+0

@Milan: 非常感謝,它確實解決了這個問題。有沒有其他辦法讓紅寶石明白,我們試圖做的是試圖調用方法,而不是追加預先? – Dharam 2009-08-28 15:03:03

+1

我不認爲有更好的方法。這就是解釋者的工作方式。避免這種問題的最好方法就是觀看這種「a = b」模式,並對其進行一些思考。經驗法則是:當通過一個實例內的setter方法進行賦值時,總是用self自己加上。 – 2009-08-28 15:29:46

+0

一種可能的解決方法:將setter方法命名爲set_title而不是title =。那麼你不需要添加自己,只需像這樣使用它:set_tile「列出頁面」 – 2009-08-28 15:33:47

相關問題