gpt4 book ai didi

ruby-on-rails - Active Record/Rails 3.2/PostgreSQL 数据库中连接模型属性的数据类型

转载 作者:行者123 更新时间:2023-11-29 11:50:23 25 4
gpt4 key购买 nike

我有模型 ClientSessions 以及将两者相关联的连接模型 ClientSessionAssignmentClientSessionAssignment有一个连接列score,在schema.rb中定义为decimal类型。在查询 Client 实例时,我使用 has_manyselect 预加载 score 值,如下所示:

class Client < ActiveRecord::Base
has_many :sessions,
:through => :client_session_assignments,
:select => 'sessions.*, client_session_assignments.score'
end

尽管 score 在数据库中被定义为 decimal,当以这种方式访问​​时,Active Record 将其表示为字符串,即 Client.first。 sessions.first.score.class 产生 String 而我期望它产生 BigDecimal。因此,在对它们执行任何计算之前,我必须将以这种方式获得的分数转换或转换为 BigDecimal

更新

原来只有 postgresql 数据库适配器表现出这种奇怪的行为。我已经提交了 https://github.com/rails/rails/issues/13044在 GitHub 上的 Rails 错误跟踪器中跟踪此问题:完整测试用例位于 https://gist.github.com/rcook/7670071 .

最佳答案

似乎 activerecord 没有通过关联正确地进行类型转换。尝试覆盖连接模型中的访问器方法:

class ClientSessionAssignment < ActiveRecord::Base
def score
ActiveRecord::ConnectionAdapters::Column.value_to_decimal super
end
end

当您调用 Client.first.sessions.first.score 时,这应该返回一个 BigDecimal

关于ruby-on-rails - Active Record/Rails 3.2/PostgreSQL 数据库中连接模型属性的数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20148994/

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