2013-02-14 30 views
2

1)我抓取HAML中的数据库的一些记录来显示,每行的属性方法返回一个散列。散列的键是字符串。我应该把这些钥匙变成符号吗?我不确定拨打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 

这难道不是真正推动将符号散列到comments数组中?我也试过symbolize_keys!,这并没有帮助。我究竟做错了什么?

回答

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 

应该正常工作,所以我认为你的问题在于别处。

+0

我打印出来的结果数组的我存储这一切,这是没有象征。 – lostintranslation 2013-02-14 03:45:02

+0

当我执行'each_with_object'时,我在'result'中得到了带符号键的散列数组,我不知道为什么它不适合你。 – 2013-02-14 04:08:00

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)已经检索所有列值在数据库中的行,将它们存储在您的评论的对象(我们分配给下面@comments)。这些值已存储在您的Comment对象中,因此您可能已经在您的视图中使用它们。

在你的控制器,如果您有:

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. 
+0

我不知道我完全理解你的答案:(我只是调用find(:all)本质上,我不知道如何控制我作为记录返回的内容,但是我想回到客户端( HAML)所有记录的数组。 – lostintranslation 2013-02-14 03:43:48

+0

我在上面详细说明了。 – kristinalim 2013-02-14 06:22:43

相关问题