我的 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/