2011-06-10 56 views
0

我正在編寫一個教程,我想通過偏離教程來學習,並且遇到一些問題。我創建了一個列出所有電影,時間,流派等的Showtime應用程序。在rails中調用屬性的方法

我有一個具有屬性名稱,流派,showtime,showdate,發行年份和標題的電影模型。在我的movie.rb文件中,我添加了一個attr_accessor:genre,因此我可以使用setter和getter方法,但是當我進入rails控制檯並創建一個包含所有屬性的電影時,genre一直保持爲「nil」當我打電話給movie.genre時,它會成爲正確的列表類型。我不確定這是爲什麼?

此外,由於流派不是一個類,有沒有什麼方法可以調用它來列出數據庫中的所有流派?

謝謝!

回答

2

是你的電影表中的一個列嗎?如果是這樣,爲什麼使用attr_accessor?

對於問題的第二部分,您可以在movie.rb中編寫一個類方法來列出所有流派。例如:

def self.genres 
    Movie.all.map(&:genre).uniq 
end 
+1

爲了澄清Bill的第一條評論,如果您正在編寫ruby類,那麼您將使用attr_accessor爲該屬性建立泛型getter和setter。在Rails中,映射到表中的字段的屬性不是必需的。 Rails會自動爲您的模型注入數據庫表中所有字段的泛型getter和setter。你需要定義自己的唯一時間是當你添加屬性到模型中,而不映射到表格(爲什麼?),或者當你需要在getter/setter中進行特殊處理而不是泛型情況時。 – Yardboy 2011-06-10 19:53:45

+0

謝謝比爾讓我更清楚如何使用類方法。感謝Yardboy在Ruby和Rails之間的澄清。我猜attr_accessor只是對於密碼這樣的東西來說是必需的,它不會被存儲在數據庫中。 – noob 2011-06-10 20:27:20

+0

更正attr_accessors。 Yardboy更好地解釋了它,現在聽起來你已經有了更好的處理。但是,是的,對於密碼(或者其他一些實際上不是DB中的列的字段)之類的東西,使用attr_accessor就沒有問題。 – 2011-06-10 23:09:24