2009-10-07 5 views
5

기존 프로젝트 레코드가 있으며 연결된 프로젝트 속성을 업데이트하기 위해 CSV 파일을 가져 오려고합니다. 그러나 종종 CSV에 공백 필드가 포함되며 관련 CSV 필드가 비어 있으면 속성을 올바르게 종료하지 않으려 고합니다. 이 같은공백이 아닌 한 속성을 업데이트 하시겠습니까?

뭔가 :

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?) 

답변

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

하지 아주 쉽게 읽을 비어있는 경우이 경우

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

이 속성 를 저장되지 않습니다; ( –

+0

동의 함, 선택된 솔루션과 비교. – khelll

1

제외하기 위해이 오래된 질문이지만, (빈 반대) 기록을 위해, 당신은 또한 전무에 속성을 설정할 수 있습니다 업데이트 목록에서 가져옵니다. 다음 예제의 모범 사례는 아니지만 백그라운드에서 진행중인 작업을 명확히하는 데 도움이 될 수 있다고 생각합니다. update_attributes는 해시에서 제공되는 특성을 업데이트하려고 시도하며 nil이 아닌 값만 사용합니다.

params[:csv] = nil if params[:csv].blank? or (arbitrary other condition) 
# now update like normal 
if @project.update_attributes(project_params) 
    ... 
etc. 
필요한 경우 컨트롤러에서이 을 할 수
1

: 그들은

관련 문제