耙子流产了!验证失败:用户不能为种子数据留空

时间:2012-08-24 01:31:38

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.1

为什么我这样做时不会分配用户?

u1 = User.create( :username => "user1", :password => "testing", :email =>  "user1@email.com", :time_zone => "Tokyo")
u2 = User.create( :username => "user2", :password => "testing", :email =>  "user2@email.com", :time_zone => "Eastern Time (US & Canada)")
u3 = User.create( :username => "user3", :password => "testing", :email =>  "user3@email.com", :time_zone => "Singapore") # User that adds Private stuff only.

o1 = Owner.create!( :name => "Owner A", :about => "", :user_id => User.find_by_username("user1"), :private => false, without_protection: true )
o2 = Owner.create!( :name => "Owner B", :about => "", :user_id => User.find_by_username("user2"), :private => false, without_protection: true )
o3 = Owner.create!( :name => "Private Owner", :about => "", :user_id => User.find_by_username("user3"), :private => true, without_protection: true )

我收到错误:

$ rake db:seed
rake aborted!
Validation failed: User can't be blank

Tasks: TOP => db:seed
(See full trace by running task with --trace)

他们有什么其他方式,我可以分配用户ID吗?

更新

Owner.rb

class Owner < ActiveRecord::Base
  attr_accessible :name, :about, :private
  belongs_to :user
  has_many :locations
  validates_presence_of :name
  validates_presence_of :user_id
  validates_inclusion_of :private, :in => [true, false]
  validates_length_of :name, :in => 3...50, :allow_blank => true
end

到目前为止,我已经尝试过:

:user_id => User.find_by_username("user1")
:user_id => u1
:user_id => u1.id
:user => User.find_by_username("user1")
:user => u1

更新2

这样可行但只为我的所有者保存user_id = 1

o1 = Owner.new( :name => "Owner A", :about => "", :private => false )
o1.user_id = u1
o1.save!

1 个答案:

答案 0 :(得分:1)

虽然您尚未包含模型的代码,但从验证错误来看,您似乎已对user模型中Owner的存在进行了验证。在Owner.create!行中,您正在传递user_id。尝试将其更改为:

o1 = Owner.create!( :name => "Owner A", :about => "", :user => User.find_by_username("user1"), :private => false, without_protection: true )

或者,或者,因为您刚刚创建了这些用户,您可以这样做:

o1 = Owner.create!( :name => "Owner A", :about => "", :user => u1, :private => false, without_protection: true )

作为旁注,您可以通过两种方式传递关联,方法是传递其id(:user_id => user.id)或传递实际实例(:user => @user)。 Rails验证非常挑剔,但如果您在user上进行验证,则会查找user,如果您在user_id上进行验证,则会查找user_id。< / p>