作为一个Rails新手,我一直遇到一个难以调试的问题:使用保留的Rails字(如:connection)作为模型或列名......
另外,有时候我会跳过我对列名的首选(比如:date),因为我不确定它是否允许,我宁愿安全。
是否有宝石或我可以添加的线来自定义rails生成器,它会自动检查这些并警告我?
我找到了一份有四年历史的名单,但更有帮助的是我可以做modelA.methods& modelB.methods获取保留字列表。我不确定这是多么全面 - 是吗?
答案 0 :(得分: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
答案 1 :(得分:2)
以下是帮助的替代方案 - http://reservedwords.herokuapp.com/。这个问题很棘手,就像@sampierson上面提到的那样 - 他的方法也应该有效。通过反复试验,您应该在足够的冲突后覆盖大多数情况。