2013-03-18 92 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