问题:
我需要创建一个允许“admin”用户创建清单的应用程序。每个核对表都有:许多项。用户可以根据需要在清单中添加和删除项目。 (通过像Cocoon这样的宝石,因为它可以优雅地处理嵌套资源。)
示例表单看起来像这样:
清单
[添加项目+]
创建表单后,普通用户就可以完成/遵循清单。检查是好/真,未检查是坏/假。
汽车
[提交]
这是困难的部分。我考虑过的一种方法......
创建一个属于清单模型的记录模型
清单
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作为键,并将用户的true / false输入作为值。因此,存储的结果看起来像:
[ 2 => true, 54 => true, 34 => false]
这样,用户可以多次完成一个清单,然后“管理员”可以提取以前清单的结果。
问题A
这似乎可行,除了“admin”用户想要编辑核对清单的时候。如果他们从清单中删除“项目”,即使我可以从关联中删除“项目”,“项目”也必须保存在数据库中。否则,如果Oil的ID为2,并且在Edit中删除了Oil,则记录的list_history哈希将具有[2 =&gt;是的,这是一个指向无处的关键。我可以看到积压的物品积压。
问题B
我不确定这是否是解决此问题的最佳方法。我已经使用rails 2年半了,但仍然觉得我在第1天做了。(实际上,我觉得我知道的更少。)也许有一个更好的解决方案即将到来,我还没有想到。
答案 0 :(得分:1)
这应该是一个评论。
也许结构如下:
class Checklist < ActiveRecord::Base
has_many :items
end
class Item < ActiveRecord::Base
belongs_to :checklist
has_many :user_items, dependent: :destroy
has_many :users, through: :user_items
end
class UserItem
belongs_to :item
belongs_to :user
end
class User
has_many :user_items, dependent: :destroy
has_many :items, through: :user_items
end
<强>清单强> 整个清单
<强>项 每项任务
user_item
关系中的依赖性破坏将删除与父项相关联的记录。(解决问题A )
<强> UserItems 强> 为每个用户条目加入表。
用户强> 您的用户模型。