我正在尝试使用 seed.rb 文件在项目中插入一些默认用户。我在控制台中执行了以下行:
rake db:seed
并且没有抛出任何错误,但也没有创建记录。当我将代码粘贴到rails控制台中时,再次显示没有错误。我猜我在 seed.rb 文件中做错了。
这就是我的模型的相关性:
security_user.rb
has_one :security_users_detail, dependent: :destroy
has_many :security_users_manage_securities
has_many :security_users_roles, through: :security_users_manage_securities
security_users_detail.rb
belongs_to :security_user
security_users_role.rb
has_many :security_users_manage_securities
has_many :security_users, through: :security_users_manage_securities
这是我在 seed.rb 文件中的代码:
users = {
Admin: {
Information: {
email: 'test@gmail.com',
password: 'test',
password_confirmation: 'test'
},
Details: {
address: 'Not defined.',
city: 'Not defined.',
country: 'Not defined.',
egn: '0000000000',
faculty_number: '',
first_name: 'Admin',
gender: 'male',
gsm: '0000000000',
last_name: 'Not defined.',
skype: 'Not defined.'
},
Roles: %w(Administrator)
}
}
users.each do |user, data|
security_user = SecurityUser.new(data[:Information])
data[:Roles].each { |role|
security_user.security_users_manage_securities.build(security_users_role: SecurityUsersRole.find_by_role(role))
}
SecurityUser.where(email: security_user.email).first_or_create!(security_user.attributes)
security_users_detail = SecurityUsersDetail.new(data[:Details])
security_users_detail.security_user_id = security_user.id
SecurityUsersDetail.where(security_user_id: security_users_detail.security_user_id).first_or_create
end
答案 0 :(得分:3)
seed.rb是一个rake任务,因此您可以使用puts
将消息输出到控制台。例如,
puts "User name: #{user.name}"
答案 1 :(得分:0)
问题是由以下行引起的:
security_user = SecurityUser.new(data[:Information])
因为即使认为新方法中传递的哈希只包含电子邮件和密码字段,结果对象也是使用其余的模型属性创建的,但设置为nil。例如,我有 id => nil 。
然后我正在做以下
SecurityUser.where(email: security_user.email).first_or_create!(security_user.attributes)
仅在存在时才创建用户。无论如何,由于 id 参数不在模型的attr_accessible子句中,我无法进行质量分配。
要删除散列的nil值,我已完成以下操作:
SecurityUser.where(email: security_user.email)
.first_or_create!(security_user.attributes
.delete_if { |key, value| value.nil? })