2013-08-08 5 views
0

나는 다음과 마이그레이션이 있습니다삽입 데이터가 존재하지 않는 경우

Sequel.migration do 
    up do 
    create_table :user_settings do 
     primary_key :id 

     String :signature, null: true, text: true 
    end 

    alter_table :user_settings do 
     add_foreign_key :user_id, :users, null: false, on_delete: :cascade 

     add_index :user_id 
    end 
    end 

    down do 
    drop_table :user_settings 
    end 
end 

이 기본 사용자 설정을 추가 할 것이다.

내가 가진 문제는 내가 전에이 마이그레이션에 대한 행을하지 않고 현재 데이터베이스에있는 모든 사용자에 대한 user_settings 테이블의 행을 만들 것입니다.

나는 각 사용자가 데이터베이스에서 일치하는 USER_ID있는 행을 가지고 있지 않은 경우, 나는 몇 가지 기본 값을 삽입 할 경우 확인합니다.

어떻게 마이그레이션 할 수 있습니까?

답변

1

일반적으로는이 사물의 종류 레이크 작업을 사용하여 수행되어 있지만 마이그레이션해야합니다. User 및 UserSetting 모델에 연관을 추가 했으므로 has_one 연관이됩니다. 올바른 방향으로 절 지적 없지만이 더있다 방법을 포함 Smruty @bachan

Sequel.migration do 
    up do 
    existing_settings = SequelAdapter::UserSettings.select(:user_id).to_a 

    SequelAdapter::User.exclude(id: existing_settings).each do |user| 
     SequelAdapter::UserSettings.create({user_id: user.id}) 
    end 
    end 
end 

감사합니다 : 당신은 내가이와 결국 새로운 마이그레이션 파일

def up 
    users = User.includes([:user_setting]).where(:user_setting => {:user_id => nil}) 
    users.each do |user| 
    user.create_user_setting 
    # OR you can write 
    # UserSetting.create({:user_id => user.id, :signature => 'your-custom-text'}) 
    end 
end 
0

을 작성해야합니다.

관련 문제