Ruby on rails 是";名称“;Rails中的保留字?

Ruby on rails 是";名称“;Rails中的保留字?,ruby-on-rails,ruby,ruby-on-rails-3,Ruby On Rails,Ruby,Ruby On Rails 3,我正在从事Rails4项目,有一个模型,其中有一个名为name的字段。不幸的是,这似乎是一个保留字。当我覆盖模型的to_s方法时,它会给我一个“堆栈级别太深”的错误。以下是to_s方法: def to_s "Category - id: #{id}, name: #{name}, slug: #{slug}" end 通过反复试验,我发现“name”字段是问题所在。我可以不叫一个字段“name”吗?我找不到任何关于它的文档,因为搜索“字段名保留”会显示一堆随机结果。根据,它不是保留的。

我正在从事Rails4项目,有一个模型,其中有一个名为name的字段。不幸的是,这似乎是一个保留字。当我覆盖模型的to_s方法时,它会给我一个“堆栈级别太深”的错误。以下是to_s方法:

def to_s
    "Category - id: #{id}, name: #{name}, slug: #{slug}"
end
通过反复试验,我发现“name”字段是问题所在。我可以不叫一个字段“name”吗?我找不到任何关于它的文档,因为搜索“字段名保留”会显示一堆随机结果。

根据,它不是保留的。但是,正如下面列出的,在许多现代数据库中,它是一个保留的sql名称,因此您可能需要小心

我使用了属性“name”,没有遇到任何问题。如果您想100%确定,尤其是在切换数据库时,请尝试以下方法:

您可以为db列指定不同的标题,例如“user_name”,并在模型中为该列创建别名:

alias_attribute :name, :username
# pattern is :new_title, :actual_db_column_title
据报道,它不是保留的。但是,正如下面列出的,在许多现代数据库中,它是一个保留的sql名称,因此您可能需要小心

我使用了属性“name”,没有遇到任何问题。如果您想100%确定,尤其是在切换数据库时,请尝试以下方法:

您可以为db列指定不同的标题,例如“user_name”,并在模型中为该列创建别名:

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

它不是保留的。必须使用关键字
self
来引用调用该方法的对象。因此,您的
def to_s
应该是:

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

它不是保留的。必须使用关键字
self
来引用调用该方法的对象。因此,您的
def to_s
应该是:

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

name
是属性还是方法?@JoãoDaniel是属性我不熟悉Rails 4,但您不应该使用
self.name
?@Joãodniel在ruby中始终是上下文,所以它会自动附加。如果我使用self,结果也是一样,我发现了问题。我以前曾将self.name指定给“name”,这恰好是Rails中类的一个方法。结果是调用name,最后调用了方法名,结果变成了一团递归混乱。
name
是属性还是方法?@JoãoDaniel是属性我不熟悉Rails 4,但你不应该使用
self。name
?@Joãodniel在ruby中始终是上下文,所以它会自动追加。如果我使用self,结果也是一样,我发现了问题。我以前曾将self.name指定给“name”,这恰好是Rails中类的一个方法。结果就是叫名字,,最后调用了方法名,结果变成了递归混乱。self始终是类中的上下文,因此您不需要这样做。@Nick self不总是上下文,除非它是单例类self始终是类中的上下文,因此您不需要这样做。@Nick self不总是上下文,除非它是单例类