2011-01-29 3 views
2

Ruby on Rails 3을 사용하고 있으며 응용 프로그램 데이터베이스에 데이터를 시드하려고합니다. 'RAILS_ROOT/모델/user.rb'에서Ruby on Rails 3을 사용하여 시드 프로세스 중 검증, 콜백 및 'attr_accessible'효과를 피하는 방법은 무엇입니까?

내가 가진 :

'RAILS_ROOT/DB/seeds.rb'에서
class User < ActiveRecord::Base 
    attr_accessible #none 

    validates :name, 
    :presence => true 
    validates :surname, 
    :presence => true 
    validates :email, 
    :presence => true 
end 

내가 가진 : 그래서

# Test 1 
User.find_or_create_by_email (
    :name  => "Test1 name", 
    :surname => "Test1 surname", 
    :email  => "[email protected]" 
) 

# Test2 
User.find_or_create_by_email (
    :name  => "", 
    :surname => "", 
    :email  => "[email protected]" 
) 

, 터미널에서 실행 무기 호 (케이스 Test1을) 및 검증에 'attr_accessible'가 전달되지 때문에 데이터베이스가 datas 채워되지 않습니다 물론

rake db:seed 

(케이스 테스트 2).

시드 프로세스 중에 유효성 검사 및 "접근 가능한 영향"을 건너 뛰고 싶습니다.가능합니까? 그렇다면 어떻게해야합니까?

PS : 나는 코드를 다음과 같이 '/ DB/마이그레이션/201 .... RB RAILS_ROOT'에 사용하지 않습니다

execute "INSERT INTO users (name, surname, email) VALUES ("Test1 name", "Test1 surname", "[email protected]")" 

UPDATE

에 모든 콜백을 건너 뛰고이 필요합니다. 가능합니까? 그렇다면 어떻게?

답변

6

당신은 당신이 attributes= 방법이 가능하게하는 매개 변수가 나타납니다 ActiveRecord's documentation 확인하는 경우 :

attributes=(new_attributes, guard_protected_attributes = true)

이처럼 사용

# Create a new user 
@user = User.new 

# Attributes for the user 
@attrib = { 
    :name  => "Test1 name", 
    :surname => "Test1 surname", 
    :email  => "[email protected]" 
} 

# Use 'send' to call the attributes= method on the object 
@user.send :attributes=, @attrib, false 

# Save the object 
@user.save 

+0

I가 또한 필요를 모든 콜백을 건너 뜁니다. 가능한가? – user502052

+2

예. do @user.send : create_without_callbacks' insted of'@ user.save' – tomeduarte

+2

죄송합니다.이 방법은 레일 2에서만 작동합니다. 아직 레일 3에서 사용하지 않았고 내가 찾고있는 것으로부터 사용할 수없는 것 같습니다. – tomeduarte