gpt4 book ai didi

ruby-on-rails - ActiveRecord:find_by 忽略自定义 getter

转载 作者:太空宇宙 更新时间:2023-11-03 17:42:14 24 4
gpt4 key购买 nike

ActiveRecord 的 find_by 方法似乎没有注意到自定义 getter。也就是说,find_by 似乎查看的是实际存储在数据库中的值,而不是 getter 返回的内容。示例:

ActiveRecord::Base.establish_connection("sqlite3::memory:")

ActiveRecord::Schema.define do
create_table(:users) { |t| t.string "name" }
end

class User < ActiveRecord::Base
def name; self["name"] || "default" end
end

User.create({ "name" => "foo" })
User.create()

p User.find_by("name" => "foo")
p User.find_by("name" => "default")
p User.last.name

这打印:

#<User id: 1, name: "foo">
nil
"default"

我本以为第二行不是nil,而是显示添加的第二条记录。我所看到的可能是 find_by 的预期行为(我不知道)。但是,我可以使用什么方法来代替 find_by,后者将使用 getter 返回的值?

最佳答案

ActiveRecord 是数据库 的接口(interface) - 所有查询都转换为 SQL。 User.find_by("name"=> "foo") 执行 SELECT * FROM users WHERE name = 'foo',然后将结果包装在 Ruby User 对象。

您的数据库不知道 setter/getter 。要使用 getter,您必须首先拥有一个 Ruby 对象 - 这意味着您需要从表中检索所有 对象,然后使用 .select 过滤结果 ruby 。

关于ruby-on-rails - ActiveRecord:find_by 忽略自定义 getter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57690307/

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