"undefined method `deleted_at=' for #<Spree::User",即使此列存在
"undefined method `deleted_at=' for #<Spree::User", even though this column exists
当我在测试中执行 create(:user)
时,出现此错误:undefined method deleted_at=' for #<Spree::User
。
它发生在我所有试图做 create(:user)
.
的测试中
这是当我抛出一个 byebug 时发生的事情:
$ rspec ./spec/models/spree/permission_sets/restricted_stock_transfer_display_spec.rb:40
1) Spree::PermissionSets::RestrictedStockTransferDisplay when not activated
Failure/Error: let(:user) { create :user }
ActiveRecord::StatementInvalid:
PG::UndefinedColumn: ERROR: column spree_users.deleted_at does not exist
LINE 1: ..."spree_users"."email" = 'darby@tremblay.name' AND "spree_use...
^
: SELECT 1 AS one FROM "spree_users" WHERE ("spree_users"."email" = 'darby@tremblay.name' AND "spree_users"."deleted_at" IS NULL) LIMIT 1
user_factory.rb
require 'spree/testing_support/sequences'
require 'spree/testing_support/factories/role_factory'
require 'spree/testing_support/factories/address_factory'
FactoryGirl.define do
factory :user, class: Spree.user_class do
email { generate(:random_email) }
login { email }
password 'secret'
password_confirmation { password }
authentication_token { generate(:user_authentication_token) } if Spree.user_class.attribute_method? :authentication_token
# [cut...]
end
end
deleted_at 存在于数据库中
$ psql Solidus_test
psql (9.4.5)
Solidus_test=# \d spree_users
Table "public.spree_users"
Column | Type | Modifiers
------------------------+-----------------------------+----------------------------------------------------------
deleted_at | timestamp without time zone |
但 Spree::User 中不存在。column_names
如果我在 create(:user)
之前的测试中输入 byebug
,我会发现:
(byebug) Spree::User.column_names
["id", "encrypted_password", .....]
^ 否 "deleted_at"
关于如何滚动的任何提示?为什么我使用 psql
可以看到 'deleted_at' 而使用 Spree::User.column_names
时却看不到?
是的,我正在连接 Solidus_test:
$ grep 'test' config/database.yml -A2
test:
<<: *default
database: Solidus_test
检查 rspec 循环外的测试环境显示 deleted_at
存在:
✗ RAILS_ENV=test r c
Running via Spring preloader in process 4092
Loading test environment (Rails 4.2.5)
irb: warn: can't alias context from irb_context.
2.2.3 :001 > Spree::User.column_names
=> ["id", "encrypted_password", "password_salt", "email", "remember_token", "persistence_token",
"reset_password_token", "perishable_token", "sign_in_count", "failed_attempts", "last_request_at",
"current_sign_in_at", "last_sign_in_at", "current_sign_in_ip", "last_sign_in_ip", "login",
"ship_address_id", "bill_address_id", "authentication_token", "unlock_token", "locked_at",
"reset_password_sent_at", "created_at", "updated_at", "spree_api_key", "remember_created_at",
"deleted_at", "confirmation_token", "confirmed_at", "confirmation_sent_at"]
我从固相线 gem 复制 spec/spec_helper
时忘记更新了一些东西。
我通过加载正确的环境修复了 spree_users.deleted_at 错误:
require File.expand_path("../dummy/config/environment", __FILE__) 22
应该是:
require File.expand_path("../../config/environment", __FILE__)
谢谢大家的建议! :-D
当我在测试中执行 create(:user)
时,出现此错误:undefined method deleted_at=' for #<Spree::User
。
它发生在我所有试图做 create(:user)
.
这是当我抛出一个 byebug 时发生的事情:
$ rspec ./spec/models/spree/permission_sets/restricted_stock_transfer_display_spec.rb:40
1) Spree::PermissionSets::RestrictedStockTransferDisplay when not activated
Failure/Error: let(:user) { create :user }
ActiveRecord::StatementInvalid:
PG::UndefinedColumn: ERROR: column spree_users.deleted_at does not exist
LINE 1: ..."spree_users"."email" = 'darby@tremblay.name' AND "spree_use...
^
: SELECT 1 AS one FROM "spree_users" WHERE ("spree_users"."email" = 'darby@tremblay.name' AND "spree_users"."deleted_at" IS NULL) LIMIT 1
user_factory.rb
require 'spree/testing_support/sequences'
require 'spree/testing_support/factories/role_factory'
require 'spree/testing_support/factories/address_factory'
FactoryGirl.define do
factory :user, class: Spree.user_class do
email { generate(:random_email) }
login { email }
password 'secret'
password_confirmation { password }
authentication_token { generate(:user_authentication_token) } if Spree.user_class.attribute_method? :authentication_token
# [cut...]
end
end
deleted_at 存在于数据库中
$ psql Solidus_test
psql (9.4.5)
Solidus_test=# \d spree_users
Table "public.spree_users"
Column | Type | Modifiers
------------------------+-----------------------------+----------------------------------------------------------
deleted_at | timestamp without time zone |
但 Spree::User 中不存在。column_names
如果我在 create(:user)
之前的测试中输入 byebug
,我会发现:
(byebug) Spree::User.column_names
["id", "encrypted_password", .....]
^ 否 "deleted_at"
关于如何滚动的任何提示?为什么我使用 psql
可以看到 'deleted_at' 而使用 Spree::User.column_names
时却看不到?
是的,我正在连接 Solidus_test:
$ grep 'test' config/database.yml -A2
test:
<<: *default
database: Solidus_test
检查 rspec 循环外的测试环境显示 deleted_at
存在:
✗ RAILS_ENV=test r c
Running via Spring preloader in process 4092
Loading test environment (Rails 4.2.5)
irb: warn: can't alias context from irb_context.
2.2.3 :001 > Spree::User.column_names
=> ["id", "encrypted_password", "password_salt", "email", "remember_token", "persistence_token",
"reset_password_token", "perishable_token", "sign_in_count", "failed_attempts", "last_request_at",
"current_sign_in_at", "last_sign_in_at", "current_sign_in_ip", "last_sign_in_ip", "login",
"ship_address_id", "bill_address_id", "authentication_token", "unlock_token", "locked_at",
"reset_password_sent_at", "created_at", "updated_at", "spree_api_key", "remember_created_at",
"deleted_at", "confirmation_token", "confirmed_at", "confirmation_sent_at"]
我从固相线 gem 复制 spec/spec_helper
时忘记更新了一些东西。
我通过加载正确的环境修复了 spree_users.deleted_at 错误:
require File.expand_path("../dummy/config/environment", __FILE__) 22
应该是:
require File.expand_path("../../config/environment", __FILE__)
谢谢大家的建议! :-D