1)我在HAML中抓取一些DB的记录来显示,每行的attributes方法返回一个哈希值。哈希的键是字符串。我应该把这些钥匙变成符号吗?我不确定拨打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!
,这没有用。我做错了什么?
答案 0 :(得分:1)
由于您使用的是Rails,因此您可以访问HashWithIndifferentAccess
,因此您可以通过同时允许两者轻松绕过“字符串或符号”问题:
h = HashWithIndifferentAccess.new(some_model.attributes)
puts h['id'] # Gives you some_model.id
puts h[:id] # Also gives you some_model.id
您的each_with_object
方法:
result = rows.each_with_object([]) do |row, comments|
comments << row.attributes.symbolize_keys
end
应该可以正常工作,所以我认为你的问题在别处。
答案 1 :(得分:1)
您是否有理由直接使用ActiveRecord::Base#attributes[your_attribute]
代替ActiveRecord::Base#your_attribute
?你没有提到原因。
ActiveRecord::Base
会自动为您的数据库字段设置访问者:
object = Model.new
object.your_column = "foo" # Writer
object.your_column # Reader
您应该可以在视图中使用阅读器,而不是通过ActiveRecord::Base#attributes
访问该值。
<强>更新强>
我不确定这是否会让你感到困惑。
Comment.find(:all)
已经检索了数据库中这些行的所有列值,并将它们存储在Comment对象中(我们在下面分配给@comments
)。这些值已存储在您的“评论”对象中,因此您可以根据需要在视图中使用它们。
在您的控制器中,如果您有:
def index
@comments = Commend.find(:all) # Fetch columns and rows.
end
您可以在HAML视图中执行此操作:
- @comments.each do |comment| # Iterate through array of Comment objects
%tr
%td= comment.comment # Use value for "comment" column.