我的目标是为包含password
和password_confirmation
的虚拟属性的员工(思考用户)模型设定种子。我使用巫术(0.9.1)作为我的身份验证框架和种子库(0.4.0)来组织对象。
生成种子时我收到的错误是:ActiveRecord::StatementInvalid: PG::UndefinedColumn: ERROR: column employees.password does not exist
以下是一些文件,用于说明我如何编写内容:
initial_model.rb
create_table :employees do |t|
.
.
.
t.string :email
t.string :crypted_password, default: nil
t.string :salt, default: nil
t.string :reset_password_token, default: nil
t.datetime :reset_password_token_expires_at, default: nil
t.datetime :reset_password_email_sent_at, default: nil
t.datetime :deleted_at
t.timestamps null: false
end
模型/ employee.rb
class Employee < ActiveRecord::Base
authenticates_with_sorcery!
attr_accessor :password, :password_confirmation
acts_as_tenant(:account)
acts_as_paranoid
.
.
.
validates :password, length: { minimum: 6, allow_nil: true }, if: -> { new_record? || changes["password"] }
validates :password_confirmation, presence: true, if: -> { new_record? || changes["password"] }
.
.
.
end
employees.seeds.rb
after :accounts, :admins do
accounts = Account.all
accounts.each do |account|
5.times do
employee = account.employees.find_or_create_by!(
avatar: "#{FFaker::Avatar.image}",
avatar_id: "#{FFaker::IdentificationESCO.id}",
avatar_filename: "#{FFaker::CheesyLingo.word}_profile_image",
first_name: "#{FFaker::Name.first_name}",
last_name: "#{FFaker::Name.last_name}",
arrival_date: "#{SeedHelpers.random_date_in_range(1979..2016)}",
dob: "#{SeedHelpers.random_date_in_range(1939..1998)}",
gender: "#{FFaker::Gender.sample}",
email: "#{FFaker::Name.name.tr(" ", "_").downcase}@example.com",
password: "tester",
password_confirmation: "tester",
is_admin: false
)
puts "Employee number: #{employee.id} created for Account: #{account.facility_name}"
end
end
end
我能够为Employee生成种子的唯一方法是在查找/创建员工时从哈希中删除虚拟属性,并从模型中删除密码/ password_confirmation验证。
我很想知道我是否忽略了在种子中使用虚拟属性而不抛出PG错误的方法?
答案 0 :(得分:0)
事实证明,使用#create
代替#find_or_create_by!
生成员工不会触发PG错误。
如果有人有更多经验丰富的光线,我会将问题保持开放一周左右。
我的两分钱是find_or_create_by!
正在搜索与虚拟属性匹配的列。由于找不到我的模式中不存在的db列,因此在调用find_or_create_by!
时由于<div class="flex-main-container">
<img src="http://www.modifiedstreetcars.com/sites/default/files/styles/carousel_circle/public/Nissan-GTR-White-Custom1.jpg?itok=RTxhTPOv" alt="">
<img src="http://www.buntycars.com/contents/member/buntycars/photos/Hot-Modified-Car-Wallpape-721c6.jpg" alt="">
<figure>
<img src="http://modscar.net/wp-content/uploads/2016/04/30-MODIFIED-CARS-ARE-SHINING-AT-THE-ZOMBIE-APOCALYPSE.jpg" alt="">
<figcaption>explanatory caption</figcaption>
</figure>
<figure>
<img src="http://modscar.net/wp-content/uploads/2016/04/30-MODIFIED-CARS-ARE-SHINING-AT-THE-ZOMBIE-APOCALYPSE.jpg" alt="">
<figcaption>explanatory caption</figcaption>
</figure>
</div>
的性能而在数据库级而不是应用程序级别引发错误。