gpt4 book ai didi

activerecord - Rails只更新空白字段

转载 作者:行者123 更新时间:2023-12-04 03:59:50 25 4
gpt4 key购买 nike

最近在Stackoverflow上的答案运气不佳(我想我是风滚草奖的国王),但是无论如何,这是可行的:

使用activeRecord时如何只更新为空的字段?我有以下代码:

master_info.update_attributes( {:originalTitle => slave_info.originalTitle,                                                                         
:starring => slave_info.starring,
:theatrical => slave_info.theatrical }

并希望像:
master_info.update_attributes( {:originalTitle => slave_info.originalTitle, if !master_info.originalTitle.present?                                                                        
:starring => slave_info.starring, if !master_info.starring.present?
:theatrical => slave_info.theatrical if !master_info.theatrical.present? }

我可以一次只做一行,但是我试图避免这种情况:
master_info.update_attributes(:originalTitle => slave_info.originalTitle) if !master_info.originalTitle.present?

我读到类似:
master_info.update_attributes( {:originalTitle => slave_info.originalTitle,                                                                         
:starring => slave_info.starring,
:theatrical => slave_info.theatrical }.reject{ |key, value| value.present?} )

但这是行不通的,它不会更新任何内容,甚至不会更新空白字段。

实际上,理想的情况是不必重复字段名称,因为它们在主节点和从节点中都被命名为相同的名称,但是我不能在activeRecord上执行.each。但这是第二个问题,主要的问题是更新空白字段。

希望这不会引起风滚草:)

最佳答案

稍后再说,但是我想我会添加一些方法,以防万一有人觉得有用。

我在第一个答案中使用了该函数,并将其修改为以下内容。正如@ksol在他的评论中所说,您可能想保留原始的update_attributes方法,因此我将此模型添加到了模型中。我敢肯定,如果您希望将其用于多个模型,它可能会在全局范围内包含在内。

def update_attributes_only_if_blank(attributes)
attributes.each { |k,v| attributes.delete(k) unless read_attribute(k).blank? }
update_attributes(attributes)
end

除非哈希已有值,否则这将从哈希中删除所有属性。然后,它将正常更新其余属性。

关于activerecord - Rails只更新空白字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9191614/

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