gpt4 book ai didi

ruby-on-rails - 如何在表单中编辑 Rails 序列化哈希?

转载 作者:行者123 更新时间:2023-12-04 05:39:51 25 4
gpt4 key购买 nike

我的 Rails 应用程序中有一个 Bulletin 模型,当它被创建时,很多值作为序列化的散列或数组存储在数据库中,供以后访问。我正在尝试为其中一个散列创建一个编辑 View ,但我不知道如何在我的表单中访问它。

存储时散列如下所示:

top_offices = { first_office: "Office Name", first_office_amount: 1234.50, 
second_office: "Office Name", second_office_amount: 1234.50 }

等等……有五个办公室。

因此,在控制台中,我可以通过执行以下操作来编辑值:
bulletin = Bulletin.last
bulletin.top_offices[:first_office] = "New Office"
bulletin.top_offices[:first_office_amount] = 1234.00
bulletin.save

我不知道如何制作一个允许我正确分配这些值的表单。我什至不需要表单来填充以前存储的值,因为我在使用表单时会完全更改它们。

最佳答案

选项 1:更新序列化属性的单实例方法

据我所知,无法直接从表单编辑序列化属性。

当我有这种事情时,我总是在模型中创建一个实例方法来接收参数并进行更新(如果我以一声爆炸(!)结束方法名称,也可以进行保存)。

在您的情况下,我会执行以下操作:

class Bulletin

...

def update_top_offices!(params)
params.each do |key, value|
self.top_offices[key] = value
end

self.save
end

...
end

选项 2:每个序列化属性键的 getter/setter

如果您真的想使用表单来更新序列化属性,另一种可能性是创建一个 getter/setter,如下所示:

class Bulletin

...

def first_office
self.top_offices[:first_office]
end

def first_office=(value)
self.top_offices[:first_office] = value
end

...
end

但是不要忘记保存更新的值。

选项 3:覆盖 method_missing

最后一种可能性是覆盖 method_missing但它有点复杂。

关于ruby-on-rails - 如何在表单中编辑 Rails 序列化哈希?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16690193/

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