问题描述
我正在使用 Ruby on Rails 3,并且正在尝试在我的应用程序数据库中植入数据.
I am using Ruby on Rails 3 and I am trying to seed data in my application database.
在RAILS_ROOT/models/user.rb"中,我有:
In 'RAILS_ROOT/models/user.rb' I have:
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"中,我有:
In 'RAILS_ROOT/db/seeds.rb' I have:
# 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' 为零(案例测试 1)并且验证未通过(案例测试 2).
of course the database will NOT populate with datas because 'attr_accessible' to nil (Case Test1) and validation not passed (Case Test2).
我想在播种过程中跳过验证和属性可访问效果". 这可能吗?如果是这样,该怎么做?
P.S.:我不想在 'RAILS_ROOT/db/migrate/201....rb' 中使用这样的代码:
P.S.: I don't want to use in 'RAILS_ROOT/db/migrate/201....rb' code like this:
execute "INSERT INTO users ( name, surname, email ) VALUES ( "Test1 name", "Test1 surname", "[email protected]")"
更新
我还需要跳过所有回调.可能吗?如果是这样,如何?
推荐答案
如果检查 ActiveRecord 的文档 你会看到 attributes=
方法有一个参数来启用这个:
If you check ActiveRecord's documentation you'll see the attributes=
method has a parameter to enable this:
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
这篇关于如何避免验证、回调和 &#39;attr_accessible&#39;使用 Ruby on Rails 3 播种过程中的效果?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!