2014-01-10 3 views
3

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

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

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

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

ответ

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 

или

MyModel.new.respond_to? :status 
2

Реальная альтернатива - http://reservedwords.herokuapp.com/. Эта проблема сложна, как упомянутый выше @sampierson - его методы также должны работать. Через проб и ошибок вы должны охватить большинство случаев после достаточного количества конфликтов.

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