Фильтрация зарезервированных слов рельсов?

Как новичок в Rails, я постоянно сталкиваюсь с одной трудной для отладки проблемой: использование зарезервированного слова Rails (например, :connection) для имени модели или столбца...

Кроме того, иногда я пропускаю свой первый выбор имени столбца (например: дата), потому что я не уверен, разрешено ли это, и я предпочел бы быть в безопасности.

Есть ли драгоценный камень или строка, которую я могу добавить для настройки генератора рельсов, которая автоматически проверяет их и предупреждает меня?

Я нашел список этих имен четырехлетней давности, но с большей пользой я могу использовать modelA.methods и modelB.methods, чтобы получить список зарезервированных слов. Я не уверен, насколько это всесторонне - не так ли?


person bluemihai    schedule 10.01.2014    source источник


Ответы (2)


Одна проблема со списком зарезервированных слов для Rails заключается в том, что разные части приложения работают в разных областях. Некоторые имена, которые могут подойти для действия контроллера, не подходят для столбца модели, и наоборот. Кроме того, учитывая, что гемы имеют тенденцию смешивать все виды кода в вашем приложении, статический список зарезервированных слов не будет вам особенно полезен.

Было бы здорово, если бы генераторы проверяли это, но сегодня этого не делают, и, вероятно, это сложно реализовать, поскольку генераторы не работают точно в той же среде, что и сами контроллеры/модели (т. е. смешивают все те же гемы). ). Кроме того, некоторые люди переходят от генераторов через некоторое время, как только они осваивают шаблоны, поэтому хорошо иметь ответ и для мира без генераторов.

Я бы предложил альтернативную стратегию. Когда вы задаетесь вопросом, является ли хорошей идеей конкретное имя метода или имя столбца, просто спросите эту часть приложения, используется ли оно уже, используя respond_to? или instance_methods.include?

ActionController::Base.instance_methods.include? :display
=> true
# display is a bad action name

или используйте свой реальный контроллер:

MyController.new.respond_to? :display

Для моделей:

ActiveRecord::Base.instance_methods.include? :status
=> false
# status is an okay column name

or

MyModel.new.respond_to? :status
person sampierson    schedule 10.01.2014

Вот альтернатива помощи — http://reservedwords.herokuapp.com/ . Эта проблема сложна, как упоминал выше @sampierson — его методы также должны работать. Путем проб и ошибок вы должны охватить большинство случаев после достаточного количества конфликтов.

person Ruby_Pry    schedule 10.01.2014