如何在序列化activerecord后访问列值

2024-03-12

我有一个像这样的简单模型:

class User < ActiveRecord::Base
  serialize :preferences
end

我想从mysql访问原始值,而不是序列化之前的值。是否可以?

我知道我可以使用

ActiveRecord::Base.connection.execute("select * from users")

但我想从User model.


Updated

好的,这就是您要找的:

User.find(params[:id]).attributes_before_type_cast["preferences"][:value]

这将以序列化形式返回字符串。

这是我能找到的最接近的结果,如果您已经从数据库中提取了对象,则它将无法工作。

抱歉误读了你的问题。您也可以从用户模型中使用它。

保留旧的答案,以防万一其他方法对某人有帮助。

旧答案

为了确保我理解这个问题,您需要表中的原始数据。 Rails 的数据序列化并存入数据库。

前任。你输入['site_id','last_update','last_restart']你得到"---\n- site_id\n- last_update\n- last_restart\n"并将其放入数据库并保存。你想检索这个:"---\n- site_id\n- last_update\n- last_restart\n"从数据库中。

好吧,这需要对数据库进行一些狂热的操作,但你可以这样做。

在一个项目中,我有一个序列化数组调用devise_table_preferences以特定顺序列出要在表中显示的首选项,如下所示:

user.devise_table_preferences = ['site_id','last_update','last_restart']

它的序列化视图如下所示:

"---\n- site_id\n- last_update\n- last_restart\n"

使用上面的方法,我进行了如下查询:

preference = ActiveRecord::Base.connection.execute("SELECT devise_table_preferences FROM users WHERE id = #{@user.id}")

它在控制台中返回一个对象,如下所示:

preference = #<Mysql2::Result:0x007fe4cdf34850> 

跑步:

preference.first[0]

给了我这个:

"---\n- site_id\n- last_restart\n"

我知道这是一项艰巨的工作,但它肯定会以序列化的方式为您提供数据。希望对您有所帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在序列化activerecord后访问列值 的相关文章

随机推荐