gpt4 book ai didi

ruby-on-rails-3 - 序列化activerecord后如何访问列值

转载 作者:行者123 更新时间:2023-12-04 00:11:32 24 4
gpt4 key购买 nike

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

class User < ActiveRecord::Base
serialize :preferences
end

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

我知道我可以使用
ActiveRecord::Base.connection.execute("select * from users")

但是我想从 User访问模型。

最佳答案

更新

好的,这就是你要找的:

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

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

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

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

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

旧答案

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

EX。你输入 ['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']

它的序列化 View 是这样的:
"---\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"

我知道这是一个很大的工作,但它肯定会以序列化的方式为您提供数据。希望能帮到你。

关于ruby-on-rails-3 - 序列化activerecord后如何访问列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11036563/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com