2016-03-22 14 views
1

'da bir veritabanı var select id, parent_id.... kullanarak bir veritabanından kayıtlar var ve bunların üzerinde map.do kullanarak yeni bir dizin oluşturuyor . Komut satırından denilen ama ne zaman Rails denetleyicisinde 'map.do' döngüsünde yeni bir dizin oluşturulmadığında, yine de Ruby

records = results.map do |row| 
    row['childs'] = {} 
    comments[row['id']] = row 
end 

Bu

çalışıyor aşağıdaki hatayı alıyorum Raylar bağlamda konulduğunda:

>ActiveModel::MissingAttributeError in CommentsController#index 
can't write unknown attribute `childs' 

bu komut satırında Ruby çalışmak ne herhangi bir fikir ve Rails değil? Rails'in nasıl çalıştığı hakkında neyi özlüyorum?

cevap

4

row bir karma değil, bir ActiveModel nesne örneğidir, bu yüzden buna yeni bir özellik ekleyemezsiniz, buna hash için bir anahtar gibi. Modelinizde, childs özniteliği için ayarlayıcıları (yazma) ve alıcıları (okuma) başlatmak için attr_accessor'u kullanabilirsiniz.

+0

Yanıt için teşekkürler, maalesef attr_accessor eklenemedi. – user3096851

+0

@ user3096851: tüm yöntemin ne olduğunu post ve sonrası, ne 'results' ve' comment'nın içerdiğini – potashin

+0

Üzgünüm son yorumum çok kısa. İşte tam bir komut dosyasındaki kod. – user3096851