2013-01-18 56 views
1

鉴于从here采取了以下例子:这段Ruby代码发生了什么?

class Post < ActiveRecord::Base 
    attr_accessible :content, :name, :title 

    validates :name, :presence => true 
    validates :title, :presence => true, 
        :length => { :minimum => 5 } 
end 

我明白我们根据该ActiveRecord::Base类创建一个类。在下一行中,attr_accessible :content, :name, :title发生了什么?我们是在声明一个变量,创建一个方法还是调用一个变量?有什么表情像:some_variable?什么是冒号?有人能够基本理解这里发生了什么吗?

回答

3

attr_accessible is a method

[它]指定可以通过质量分配设置的模型属性的白名单。

它的参数是一组符号(:业务,例如,:content是一个符号)。

在列表的方法遍历性表达,为符号,并将它们添加到属性的列表,它的好质量分配。

大多数红宝石书籍应该讨论symbols

+2

所以当我在这个'attr_accessible'中输入时,我确实调用了一个方法并传递给它:'symbols',它们是':symbols',因为它们前面有一个':'符号? –

+0

非常感谢! http://www.troubleshooters.com/codecorn/ruby/symbols.htm非常有帮助。不,我的书没有涵盖基本的语法以及我本来喜欢的。我可能不得不阅读另一本关于这些类型的书。我用过:http://www.humblelittlerubybook.com/book/html/index.html –

+0

@JeremyIglehart该方法在类加载时调用。 Ruby类定义只是可执行代码。 'attr_accessible'是一个类方法。你传递的是符号,而标记是符号,因为前面的':'。 –

0

attr_accessible距离的ActiveRecord :: Base的继承的方法。这是一种将符号传入的元方法(应将其命名为类的属性)。它所做的是使它们可以访问,所以在另一个区域现在posts.content现在可用于其他方法。

validates确保特定属性的允许它们被保存到数据库之前。如果条件评估为false,则会引发错误。再次第一传递用相同的名称属性(在这种情况下:name)一个符号,然后你在要检查的条件的一个散列传递(在这种情况下`:存在=>真')是发

+0

非常感谢 - 我非常感谢您为本主题带来的清晰度。我对这件事的谈论越多,它就会越好。 –

+0

这不是attr_accessible所做的; attr_accessible使属性可以进行批量赋值。 –