use*_*052 2 database ruby-on-rails seed ruby-on-rails-3
我正在使用Ruby on Rails 3,我试图在我的应用程序数据库中播种数据.
在'RAILS_ROOT/models/user.rb'中我有:
class User < ActiveRecord::Base
attr_accessible #none
validates :name,
:presence => true
validates :surname,
:presence => true
validates :email,
:presence => true
end
Run Code Online (Sandbox Code Playgroud)
在'RAILS_ROOT/db/seeds.rb'中我有:
# Test 1
User.find_or_create_by_email (
:name => "Test1 name",
:surname => "Test1 surname",
:email => "test1@test1.test1"
)
# Test2
User.find_or_create_by_email (
:name => "",
:surname => "",
:email => "test2@test2.test2"
)
Run Code Online (Sandbox Code Playgroud)
所以,在终端上运行
rake db:seed
Run Code Online (Sandbox Code Playgroud)
当然数据库不会填充数据,因为'attr_accessible'到nil(Case Test1)并且验证未通过(Case Test2).
我想在播种过程中跳过验证和"attr-accessible effects". 可能吗?如果是这样,怎么办?
PS:我不想在'RAILS_ROOT/db/migrate/201 .... rb'代码中使用这样的代码:
execute "INSERT INTO users ( name, surname, email ) VALUES ( "Test1 name", "Test1 surname", "test1@test1.test1")"
Run Code Online (Sandbox Code Playgroud)
UPDATE
我还需要跳过所有回调.可能吗?如果是这样,怎么样?
如果您查看ActiveRecord的文档,您将看到该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 => "test1@test1.test1"
}
# Use 'send' to call the attributes= method on the object
@user.send :attributes=, @attrib, false
# Save the object
@user.save
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2624 次 |
| 最近记录: |