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 时资产未编译

升级到 Rails 5 时,序列化为哈希的现有数据会产生错误

Rails 升级 3.2 到 4.0:模型弃用警告