1)我正在用HAML抓取一些数据库记录来显示,每行的attributes方法返回一个hash。hash的键是字符串。我应该把这些键转换成符号吗?我不确定调用symbolize_keys
是否值得。例如,
%td #{app['comment']}
或
%td #{app[:comment]
2)我试图将返回的哈希数组符号化,但没有效果:
rows = Comment.all(:order => 'created DESC')
result = rows.each_with_object([]) do |row, comments|
comments << row.attributes.symbolize_keys
end
它不是真的把符号化的散列推到注解数组中吗?我也试过symbolize_keys!
,但没有帮助。我做错了什么?
3条答案
按热度按时间omhiaaxx1#
由于您使用的是Rails,因此您可以访问
HashWithIndifferentAccess
,这样您就可以通过允许以下两种操作来轻松绕过“字符串或符号”问题:您的
each_with_object
方法:应该工作得很好,所以我认为你的问题出在别的地方。
mqkwyuun2#
你有直接使用
ActiveRecord::Base#attributes[your_attribute]
而不是ActiveRecord::Base#your_attribute
的原因吗?你没有提到原因。ActiveRecord::Base
自动为数据库字段设置访问器:您应该能够在视图中使用读取器,而不是通过
ActiveRecord::Base#attributes
访问值。我不知道这是不是让你困惑的地方。
Comment.find(:all)
已经为数据库中的这些行检索了 * all * columns值,并将它们存储在Comment对象中(我们在下面将其分配给@comments
)。这些值已经存储在Comment对象中,因此您可以根据需要在视图中使用它们。在控制器中,如果您有:
你可以在HAML视图中这样做:
izkcnapc3#
你可以添加hook,它在模型加载后象征键: