2013-01-18 57 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使屬性可以進行批量賦值。 –