2011-06-10 58 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