【发布时间】:2015-05-24 05:08:37
【问题描述】:
问题:
我需要创建一个允许“管理员”用户创建清单的应用程序。每个清单都有:许多项目。用户将能够根据自己的选择在清单中添加和删除项目。 (通过像 Cocoon 这样的 gem,因为它非常优雅地处理嵌套资源。)
示例表单如下所示:
清单
- 项目
- 项目
- 项目
[添加项目+]
创建表单后,普通用户就可以完成/遵循清单。选中是好/真,未选中是坏/假。
汽车
- 检查机油 [复选框]
- 检查轮胎 [复选框]
- 检查灯 [复选框]
[提交]
这是困难的部分。我考虑过的一种方法...
创建一个属于 Checklist 模型的 Record 模型,
清单
class Checklist < ActiveRecord::Base
has_many :records
end
记录
class Record < ActiveRecord::Base
belongs_to :checklist
end
然后,将结果序列化为哈希...
class Record < ActiveRecord::Base
belongs_to :checklist
serialize :list_history, Hash
end
我会使用 item.id 作为键,用户输入真/假作为值。因此,存储的结果如下所示:
[ 2 => true, 54 => true, 34 => false]
这样,用户可以多次完成检查表,然后“管理员”可以调出以前检查表的结果。
问题 A
这似乎可行,除非“管理员”用户想要编辑清单。如果他们从清单中删除“项目”,即使我可以从关联中删除“项目”,“项目”也必须保存在数据库中。否则,如果 Oil 的 ID 为 2,并且在 Edit 中删除了 Oil,则记录的 list_history 哈希将具有 [2 => true],这是一个指向无处的键。我可以想象积压的物品堆积如山。
问题 B
我不确定这是否是解决此问题的最佳方法。我已经使用 Rails 2 1/2 年了,仍然感觉就像我在第一天所做的那样。(实际上,我觉得我知道的更少。)也许有一个更好的解决方案指日可待,我还没想到。
【问题讨论】:
标签: ruby-on-rails ruby serialization checkbox