Rails 将 3.2.* 升级到 4 不在 Rails 控制台中显示所有用户属性
Posted
技术标签:
【中文标题】Rails 将 3.2.* 升级到 4 不在 Rails 控制台中显示所有用户属性【英文标题】:Rails upgrade 3.2.* to 4 Does not show all user attributes in rails console 【发布时间】:2020-12-28 07:12:03 【问题描述】:我遇到了一个奇怪的错误。致力于从 3.2.22.1 tp 4.2.11.3 升级 Rails 应用程序。一切运作良好。测试套件正在通过绿色。但是,当我进入 Rails 控制台并执行 user = User.new
或使用 User.new.attributes
列出属性时,我只会返回一些字段。
具体
"_id"=>BSON::ObjectId('XXxxXXxxxxXXXxXX'),
"email"=>"",
"encrypted_password"=>"",
"sign_in_count"=>0,
"time_zone"=>"Central Time (US & Canada)",
"admin"=>false
这个列表应该更大,例如,它不包括所有设计字段,如last_sign_in_at
或其中任何一个。这是它的样子,同样的命令,在我们的生产服务器上运行,它是以前版本的 rails
_id: xxxXXXxxxXXXXxXXXXxx,
invited_by_type: nil,
invited_by_field: nil,
invited_by_id: nil,
email: "",
encrypted_password: "",
reset_password_token: nil,
reset_password_sent_at: nil,
remember_created_at: nil,
sign_in_count: 0,
current_sign_in_at: nil,
last_sign_in_at: nil,
current_sign_in_ip: nil,
last_sign_in_ip: nil,
confirmation_token: nil,
confirmed_at: nil,
confirmation_sent_at: nil,
unconfirmed_email: nil,
invitation_token: nil,
invitation_created_at: nil,
invitation_sent_at: nil,
invitation_accepted_at: nil,
invitation_limit: nil,
name: nil,
time_zone: "Central Time (US & Canada)",
admin: false
我担心有什么东西默默地失败了,我没有检测到它。我可以将未列出的值保存在控制台中,但它不会向我显示它们,这不是以前的工作方式。
有人知道为什么会这样吗?
具体版本是:
-
mongid -> 5.0.1
设计 -> 4.7.2
导轨 -> 4.2.11.3
【问题讨论】:
你没有设置任何字段,你为什么期望它们被返回? 您的意思是包含值的字段吗?如果我尝试返回一个存在的用户,它仍然只显示这些,即使它们具有(例如)invitation_accepted_at
值。但是它之前的行为是,如果我运行user = User.new
,它将显示包含所有字段的空记录。现在它只显示这些字段,如果用户在其他字段中有值,它也只显示这些字段。
如果您想询问具有属性的用户,请相应地编辑您的问题。否则,我假设您将通过各种机制默认任何属性,这似乎是合乎逻辑的行为。
我在标题中提到过,在问题中也特别提到过,不知道你还想看什么。
【参考方案1】:
最新版本的 Mongoid 不包含从未在 attributes
中写入的属性。
除非您引用了声称 Mongoid 会返回从未写入的属性的文档,否则您会遇到预期的行为。
【讨论】:
“从未写在属性中”究竟是什么意思?指的是什么过程?我在文档中找不到任何与此相关的内容。以上是关于Rails 将 3.2.* 升级到 4 不在 Rails 控制台中显示所有用户属性的主要内容,如果未能解决你的问题,请参考以下文章
将 Bundler 升级到 2.1.4 后初始化 Rails 控制台出错
Rails 3.2 到 4.0 升级:未定义方法 to_datetime for false:FalseClass
将 rails 应用程序从 3.2.3 迁移到 rails 4.0.0.rc2 后无法在 Heroku 上部署
Rails 5.2 和 webpacker 3.4.3:部署到 Heroku 时资产未编译