2009-10-07 33 views
5

Mevcut bir Proje kaydım var ve ilişkili Proje özelliklerini güncelleştirmek için bir CSV dosyası alıyorum. Bununla birlikte, genellikle CSV boş alanlar içerecektir ve ilgili CSV alanı boşsa eksik öznitelikler istemiyorum. BöyleGüncelleştirme özellikleri boş değil mi?

şey:

project.update_attributes(:name => row.field('project_name') unless row.field('project_name').blank?,            
          :owner => row.field('project_owner') unless row.field('project_owner').blank?, 
          :due_date => row.field('project_due_date') unless row.field('project_due_date').blank?) 

cevap

23
project.update_attributes({:name => row.field('project_name'),                   
          :owner => row.field('project_owner'), 
          :due_date => row.field('project_due_date')}.reject{|k,v| v.blank?}) 
0
attrs = [:name,:owner,:due_date].inject({}) {|res,obj| res[obj] = row.field("project_#{obj}") unless row.field("project_#{obj}").blank? } 
project.update_attributes attrs 
+2

Değil çok kolay okunabilir boş Bu durumda

def some_params params.permit(:foo, :bar).reject { |_, v| v.blank? } end 

nitelikleri kaydedilmez; ( –

+0

Toplanan çözüme kıyasla, Anlaştık. – khelll

1

dışlamak amacıyla Bu eski bir soru ama (boş aksine) kayıt için, ayrıca nil öznitelik ayarlayabilirsiniz güncellemeler listesinden. Aşağıdaki örnekte en iyi uygulamayı aramadım, ancak arka planda neler olup bittiğini açıklığa kavuşturmaya yardımcı olabileceğini düşünüyorum: update_attributes yalnızca sıfır olmayan bir değere sahip olan hash içinde sağlanan özellikleri güncellemeye çalışacaktır.

params[:csv] = nil if params[:csv].blank? or (arbitrary other condition) 
# now update like normal 
if @project.update_attributes(project_params) 
    ... 
etc. 
Gerekirse denetleyici bu yapabilirsiniz
1

: onlar

İlgili konular