2013-02-14 26 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

相關問題