这个Ruby代码发生了什么?

时间:2013-01-18 19:50:01

标签: ruby-on-rails ruby syntax

鉴于以下示例来自here

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这样的表达式是什么?冒号是什么?有人可以基本了解这里发生了什么吗?

2 个答案:

答案 0 :(得分:3)

attr_accessible is a method

  

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

它的参数是符号数组(:商家,例如,:content是符号)。

该方法遍历属性表达为符号的列表,并将它们添加到可以批量分配的属性列表中。

大多数Ruby书籍应该讨论过symbols

答案 1 :(得分:0)

attr_accessible是从ActiveRecord :: Base继承的方法。这是一种将符号传递给它的元方法(应该将其命名为类的属性)。它的作用是使它们可访问,因此现在在另一个区域posts.content现在可用于其他方法。

validates在将它们保存到数据库之前确保某些属性。如果条件的计算结果为false,则会引发错误。再次首先传递一个与属性同名的符号(在本例中为:name),然后传入要检查的条件的哈希值(在本例中为`:presence =&gt; true') FA