2

我正在使用 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

在 '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"
)

所以,在终端中运行

rake db:seed

当然,数据库不会填充数据,因为“attr_accessible”为零(案例测试1)并且验证未通过(案例测试2)。

我想在播种过程中跳过验证和“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")"

更新

我还需要跳过所有回调可能吗?如果是这样,怎么做?

4

1 回答 1

6

如果您查看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

于 2011-01-29T18:59:26.917 回答