gpt4 book ai didi

ruby-on-rails - 相当于 ActiveRecord has_attribute 的 ActiveModel?

转载 作者:行者123 更新时间:2023-12-01 01:28:32 26 4
gpt4 key购买 nike

我使用 ActiveModel 是因为我连接到第三方 API 而不是 db。我已经编写了自己的初始化程序,以便我可以传入一个哈希值,并将其转换为模型上的属性 - 以支持应用程序中的某些表单。

attr_accessor :Id, :FirstName, :LastName,...

def initialize(attributes = {})
attributes.each do |name, value|
send("#{name}=", value)
end
end

问题是我想使用相同的模型来处理来自 API 的数据检索,但这有很多我并不真正关心的其他数据。因此,我想在遍历从 API 返回的哈希时进行检查,并检查该属性是否存在于我的模型中,如果不存在,则忽略它。这应该允许我为表单帖子和从 API 返回的数据拥有一致的模型。就像是:
def initialize(attributes = {})
attributes.each do |name, value|
if self.has_attribute?(name)
send("#{name}=", value)
end
end
end

我查看了 ActiveModel API 文档,但似乎没有等效的文档。这让我觉得我应该以不同的方式做这件事。

这是正确的(Rails)方式吗?当数据来自不同来源时,如何确保我具有一致的模型属性?

最佳答案

基于上面的代码示例,您不需要使用类似于 has_attribute? 的 ActiveModel 方法。总而言之——你可以简单地回到普通的 Ruby :

def initialize(attributes = {})
attributes.each do |name, value|
send("#{name}=", value) if respond_to?("#{name}=")
end
end

如果它已经用 attr_accessor 启动,这只会分配属性。 .

关于ruby-on-rails - 相当于 ActiveRecord has_attribute 的 ActiveModel?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6251910/

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