本文介绍了如何避免验证、回调和 'attr_accessible'使用 Ruby on Rails 3 播种过程中的效果?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

这篇关于如何避免验证、回调和 &amp;#39;attr_accessible&amp;#39;使用 Ruby on Rails 3 播种过程中的效果?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

07-23 13:31