2011-01-29 40 views
2

我正在使用Ruby on Rails 3,並試圖在我的應用程序數據庫中播種數據。如何避免使用Ruby on Rails 3進行播種過程中的驗證,回調和'attr_accessible'效果?

在 'RAILS_ROOT /模型/ user.rb' 我有:

class User < ActiveRecord::Base 
    attr_accessible #none 

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

在 'RAILS_ROOT/DB/seeds.rb' 我有:

# 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]" 
) 

所以,在終端中運行

rake db:seed 

當然數據庫不會填充數據,因爲'attr_accessible'爲零(Case Test1)並且驗證沒有通過(Case Test 2)。

我想在播種過程中跳過驗證和「attr-accessible效果」。可能嗎?如果是這樣,該怎麼做?

PS:我不想在 'RAILS_ROOT/DB /遷移/ 201 .... RB' 使用這樣的代碼:

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

UPDATE

我還需要跳過所有回調這可能嗎?如果是這樣,怎麼樣?

回答

6

如果檢查ActiveRecord's documentation你會看到attributes=方法有一個參數來啓用此:

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

我還需要跳過所有回調。可能嗎? – user502052 2011-01-29 20:21:12

相關問題