2013-03-18 3 views
2

Я работаю над проектом Rails 4 и имею модель, которая имеет поле под названием имя. К сожалению, похоже, что это может быть зарезервированное слово. Когда я переписываю метод to_s модели, он дает мне слишком глубокую ошибку «уровень стека». Вот метод to_s:Является ли «имя» зарезервированным словом в Rails?

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

Методом проб и ошибок я выяснил, что поле «имя» было проблемой. Не могу ли я назвать поле «имя»? Я не могу найти документацию об этом, так как поиск «имя поля зарезервирован» показывает кучу случайных результатов.

+1

Является ли 'name' атрибутом или методом? –

+0

@ JoãoDaniel Атрибут –

+0

Я не знаком с Rails 4, но разве вы не должны использовать 'self.name'? –

ответ

0

Согласно this blacklist, это не зарезервировано. Однако, как указано внизу, это зарезервированное имя sql во многих современных базах данных, поэтому вы можете быть осторожны с этим.

Я использовал атрибут «имя» и не столкнулся с какими-либо проблемами с ним. Если вы хотите быть на 100% уверенным, особенно когда речь заходит о переключении баз данных, попробуйте это:

Вы можете дать столбцу db другое название, например «имя_пользователя», и создать псевдоним для этого столбца внутри вашей модели :

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 всегда является контекстом в классе, поэтому вам не нужно это делать. –

+0

@Nick self не всегда является контекстом, за исключением класса Singleton – bjhaid

Смежные вопросы