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

Является ли это на самом деле не толкая символизировал хэш в массив комментариев? Я также пробовал 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

+0

Я получаю массив хэшей с символьными клавишами в 'result', когда я делаю это' each_with_object', я понятия не имею, почему он не работает для вас. –

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.

Update:

Я не уверен, если это то, что вас смущает.

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 (: все) по существу.Я не уверен, как контролировать то, что я получаю в качестве записи.Но я хотел бы вернуться к клиенту (HAML) массив всех записей. – lostintranslation

+0

Я разработал выше. – kristinalim

Смежные вопросы