Programing

열, 모든 행 업데이트

lottogame 2020. 10. 29. 07:44
반응형

열, 모든 행 업데이트


내 테이블에 새 열을 추가했지만 : default 옵션을 추가하는 것을 잊었습니다. 이제 모든 행에 해당 열을 채우고 싶습니다.

콘솔을 사용하는 방법이 있습니까? 지난 한 시간 동안 Google을 검색했지만 아무것도 찾을 수 없습니다.

단일 개체에 대해 수행하는 방법을 알고 있지만 모델의 모든 항목에 대해서는 아닙니다. Foo.find (1) .update_attribute (: myattribute, 'value')


이 시도:

Foo.update_all(some_column: "bar")

그러면 데이터베이스에 대한 SQL 쿼리가 생성됩니다.

UPDATE "foos" SET "some_column" = "bar"; 

이전 마이그레이션에서 이미 새 필드를 만들었으므로 완전히 새로운 마이그레이션을 만듭니다.

rails g migration UpdateFoos

마이그레이션 수정 :

def self.up    
  say_with_time "Updating foos..." do
    Foo.find(:all).each do |f|
      f.update_attribute :myattribute, 'value'
    end
  end
end

# from command line
Rake db:migrate

이것이 작동하는지 알려주세요. 몇 가지 조정이 필요할 수 있습니다. 자세한 내용은 rails 문서참조하십시오 .


다음과 같이 할 수 있습니다.

Foo.update_all (new_column : "bar")


물론과 같은 smth를 사용할 수 Foo.update_all(:myattribute => "value")있지만 이미 생성 된 데이터 만 수정합니다. 모든 "미래"데이터에 대한 기본값을 설정하려면 다음과 같이 별도의 마이그레이션을 만드는 것이 좋습니다.

rails generate migration AddDefaultValueToFoo

다음과 같이 새 마이그레이션을 수정합니다 (예 : myattribute에 문자열 유형이 있음).

class AddDefaultValueToFoo < ActiveRecord::Migration
  def self.up
    change_column :foos, :myattribute, :string, :default => "value"
    Foo.update_all(:myattribute => "value")
  end
end

참고 URL : https://stackoverflow.com/questions/4512696/update-a-column-all-rows

반응형