2013-03-18 91 views
2

我正在開發一個Rails 4項目,並有一個模型,其中有一個名爲的域名。不幸的是,它似乎可能是一個保留字。當我覆蓋模型的to_s方法時,它給了我一個「堆棧級別太深」的錯誤。這是to_s方法:在Rails中,「名稱」是保留字嗎?

def to_s 
    "Category - id: #{id}, name: #{name}, slug: #{slug}" 
end 

通過試驗和錯誤我發現字段「名稱」是問題。我可以不叫一個字段「名稱」嗎?我找不到任何有關它的文檔,因爲搜索「字段名稱保留」顯示了一堆隨機結果。

+1

是'name'屬性還是方法? – 2013-03-18 22:26:07

+0

@JoãoDaniel屬性 – 2013-03-18 22:26:36

+0

我不熟悉Rails 4,但不應該使用'self.name'嗎? – 2013-03-18 22:28:52

回答

0

根據this blacklist,它不保留。但是,如下所列,它是許多現代數據庫中的保留sql名稱,因此您可能需要謹慎。

我已經使用屬性「名稱」,並沒有遇到任何問題。如果你想100%確定,特別是當涉及到切換數據庫時,試試這個:

你可以爲db列賦予一個不同的標題,比如「user_name」,併爲你的模型中的該列創建一個別名:

alias_attribute :name, :username 
# pattern is :new_title, :actual_db_column_title 
0

這不是保留。您必須使用關鍵字self來引用調用該方法的對象。所以你的def to_s應該是:

def to_s 
    "Category - id: #{self.id}, name: #{self.name}, slug: #{self.slug}" 
end 
+0

self總是上下文,所以你不需要這樣做。 – 2013-03-18 22:39:27

+0

@Nick self並不總是上下文,除了它是一個Singleton類 – bjhaid 2013-03-18 22:48:59