Как разрешить конфликт между атрибутом модели рельсов и именем драгоценного камня?

На рельсах 3.2.1. У меня есть модель под названием Car с атрибутом rate (указывает количество цен). Я использую драгоценный камень ajaxful_rating, который связывает метод под названием rate (для представления оценки того, насколько хорош учитель) с Car.

На мой взгляд, когда я пытаюсь показать количество цен с помощью:

<%= @car.rate %>

Я получаю синтаксическую ошибку из-за путаницы в именах. Как мне сообщить Rails, что я хочу вызвать атрибут rate, а не метод rate? Есть ли простой способ решить эту проблему без отката моей БД и переименования атрибута?


person Community    schedule 12.03.2012    source источник


Ответы (2)


Вы можете использовать read_attribute:

@car.read_attribute(:rate)

но я предлагаю вам разрешить конфликт, переименовав один из них, поскольку это только вызовет у вас проблемы и замешательство в будущем.

Вам не нужно откатывать базу данных, чтобы переименовать столбец, вам просто нужно создать новый миграция, которая делает это.

person Andrew Marshall    schedule 12.03.2012
comment
Спасибо, я все еще новичок в рельсах, поэтому думаю, что вы правы в части путаницы ... Интересно, я никогда не знал о read_attribute (). - person ; 13.03.2012

Ну, во-первых, вам не нужно откатывать базу данных, чтобы переименовать атрибут. Вы бы просто создали новую миграцию с одним изменением: Как я могу переименовать столбец базы данных при миграции Ruby on Rails? Подобные изменения необходимы время от времени, поэтому в Rails есть этот механизм для их обработки.

Но чтобы ответить на ваш вопрос, альтернативным обходным путем было бы написать новый метод на машине, который фактически дает доступ к атрибуту следующим образом:

def rate_price
  read_attribute(:rate)
end
person Dogweather    schedule 12.03.2012
comment
Спасибо за предложение и ссылку на статью о миграции! Поскольку я новичок в рельсах, я вижу точку зрения другого автора о том, что я сбиваюсь с толку в будущем, хотя необходимость идти этим путем немного повлияет на мои тесты rspec. - person ; 13.03.2012
comment
Ваш синтаксис неверен, read_attribute - это метод с аргументом, а не массив. - person Andrew Marshall; 13.03.2012