在编写Rails应用程序时,有几个地方需要字符串表列宽:验证,RSpec测试,输入表单等。似乎也值得在DB中设置字符串的长度限制。
目前我已经在模型中设置了LENGTHS哈希,因此我可以在其他地方访问长度并在这方面保持代码DRY。如果我在DB中设置长度限制,是否可以从那里读取值(或用它们初始化LENGTHS哈希)以使代码更干?也就是说,什么是读取模型中数据库列的字符串长度限制的代码,以便我可以使用它?
答案 0 :(得分:1)
您可以访问AR模型的columns方法。
Model.columns.map(&:limit)
Model.columns.map(&:name)
Model.columns.map(&:null)
Model.columns.map(&:sql_type)
...
所以你可以使用这个方法来构造你的哈希/数组/其他。 我相信你所说的长度属性是限制这个表示法。
答案 1 :(得分:0)
class ActiveRecord::Base
def self.method_missing(method_id, *args)
if self.columns_hash.has_key?(method_id.to_s)
self.columns_hash[method_id.to_s]
else
super
end
end
end
这允许以干净的方式访问columns_hash
提供的任何列架构数据。因此:
Model.column_name
返回所有可用数据的哈希值
Model.column_name.hash_key
会返回一个感兴趣的值
例如:
Company.contact_name.limit
返回contact_name
列的最大长度。
根据我的阅读,数据库在启动时加载架构数据,因此不会发生数据库命中,columns_hash
会记住数据。