2013-10-02 30 views
28

Serileştirilmiş bir alana sahip var olan bir kullanıcı var ve diziye/dizileştirilmiş alana son iletileri ekleyebilmek istiyorum.Seri hale getirilmiş bir diziye nasıl eklenir

class User < ActiveRecord::Base 
serialize :recent_messages 
end 
Ben

@user = current_user 
@user.recent_messages << params[:message] 
@user.save 

denedim denetleyicisi olarak

ama aşağıdaki hatayı olsun: Ben şemada

NoMethodError (undefined method `<<' for nil:NilClass): 

var:

create_table "users", :force => true do |t| 
    t.text  "recent_messages" 
    end 

Herhangi fikirleri Nerede yanlış gidiyorum?

+0

Referans için: https://stackoverflow.com/questions/45066671/how-can-i-get-rails-to-automatically-populate-a-dynamically-generated-form/45067018#45067018 adresine bakabilirsiniz. dizilere göre iyi davranan yapı formları – user1876508

cevap

48

Sen serialize için bir sınıf geçebilir nil olacaktır:

:
class User < ActiveRecord::Base 
    serialize :recent_messages, Array 
end 

yukarıda recent_messages bir Array olmasını sağlar

User.new 
#=> #<User id: nil, recent_messages: [], created_at: nil, updated_at: nil> 

Türler eşleşmiyorsa varolan alanları dönüştürmeniz gerekebileceğini unutmayın.

+0

Raylarda nasıl yapılır 5.x? Raylarda çalışmıyor 5 – Jaswinder

1

Bir öğeyi ilk kez recent_messages ürününe göndermeye çalıştığınız için, öğeyi itecek bir dizi yok (varsayılan olarak alan nil). buna zorlayabilir önce Yani dizi oluşturmalısınız

@user = current_user 
if @user.recent_messages.nil? 
    @user.recent_messages = [params[:message]] 
else 
    @user.recent_messages << params[:message] 
end 
@user.save 
1

Ayrıca kod aşağıdaki deneyebilirsiniz: - varsayılan @user.recent_messages olarak

@user.recent_messages ||= [] 
@user.recent_messages << params[:message] 
@user.save 
İlgili konular