2016-03-20 14 views
0

modelinde :primary_image_id adlı özelliğe sahip bir modelim var. Bir user_itemhas_manyuser_item_images. primary_image_id'un amacı, user_item_images'dan birinin kimliğine eşit olarak ayarlamaktır, böylece mantığı kullanabilirim, böylece nesne görünümde kullanıcı tarafından silinemez. Bu öznitelik kümesi olmadan bir user_item A asla olmamalı veya en az özniteliği ayarlanana kadar birkaç saniye var olmalıdır. Formumda user_item, user_item_images ile birlikte oluşturulur.Raylar - her ikisi de birlikte oluşturulduktan sonra alt öğenin ana özniteliğini ayarlayın

user_item_image.id yalnızca oluşturulduktan sonra ayarlanmış gibi görünüyor. Ben user_item

def set_primary_image_id 
    self.primary_image_id = self.user_item_images.first.id 
    end 

üzerinde after_create geri arama yapıyor denedim ama çocuk yarattı wan't ve böylece bir kimliği olmadığı için, ben tahmin ediyorum çalışmak görünmüyordu.

ben, user_item_image modeline bir after_create geri arama yapmak gibi bir şey sanırım:

def set_user_item_primary_image_id 
    user_item = self.user_item 
    user_item.primary_image_id = user_item.user_item_images.first.id 
end 

ama gerçekten bir user_item_image oluşturulduğunda her zaman yapılmamalıdır çünkü bu overkill gibi görünüyor.

cevap

1

after_create s cihazınız doğru bir şekilde ayarlanmış olabilir, ancak veritabanına hiçbir şey yazmıyor olabilirler. Deneyin:

update_attributes(primary_image_id: user_item_images.first.id) 

user_item_images Eğer user_item oluşturmadan önce, aynı zamanda ikinci bir yazma sorgusu ihtiyacını ortadan kaldırarak bir before_create alanına ayarlayabilirsiniz varsa. Ne yaparsanız yapın, bazı baskıları serpiştirin ya da veri yazıp yazmadığınızı kontrol etmek için bir hata ayıklayıcıya bırakın. Eğer build kullanarak tek seferde her şeyi oluşturuyorsanız

, tüm nesneler oluşturulur ve UserItem#set_user_item_primary_image_id koşular önce kimlikleri olmadığından bu, sadece iyi çalışır edilecektir:

ui = UserItem.new(params[:user_item]) 
image = ui.user_item_images.build(params[:user_item_image]) 
ui.save # Creates UserItem, creates UserItemImage, assigns primary_image_id 

bile temizleyici, kontrol ettirmek için accepts_nested_attributes_for.

+0

Gönderme sırasında "user_item" öğesine ait bir "user_item" yanı sıra "user_item_images" oluşturan yuvalanmış bir form var. 'After_create' öğesini 'user_item' modeline koyarsam, bu işlem tüm işlemden sonra olur mu yoksa user_items'in çocukları olmadan önce olur mu? – user4584963

+0

'build' işlevini kullanarak' after_create', her şey gereken kimliklere sahip olduğunda çalışır. –

İlgili konular