所以这是一个普遍的问题:
我有 3 张桌子,为简单起见,我们称它们为 a,b,c
表一个
ID
表 b
id
a_id
c_id
表 c
id
因此 b 中的记录将 a 和 c 中的记录关联起来。
问题是:当用户提交表单时,会提交一些哈希值,每个哈希值代表 b 中需要填写的记录。现在我只是简单地删除和重新添加,我希望能够迭代现有的关联和(这就是它变得棘手的地方)如果数据库中的关联(D)比提交的(S)多,那么删除 DS 条目,如果 DS 相等则替换当前条目,如果 DS 为负数,则添加 SD 记录。
然后将它们全部更新为新的关联。
我尝试使用循环执行此操作,但问题是活动记录查询返回一个数组,我仍然有一个哈希要迭代。因为我不能让两个数组相互同步循环,所以我不确定从这里去哪里。有任何想法吗?
注意:我可以发布实际代码,但是处理此代码的控制器函数非常长。
编辑:我觉得我在这里不够具体,尽管我越来越确定这一切都必须是手动的,这是我正在寻找的一个粗略示例。
submitted_hash[:whatever].each do |key,value|
#value.first_submit
#value.second_submit
end
ModelName.find(:all, :conditions => ["fk_ref = ?", params[:fk_ref]]).each do |model_value|
end
现在,如果“ModelName.find”返回的值比“submitted_hash”中的当前值多,那么我们需要创建更多引用来满足需要。
如果“ModelName.find”返回小于“submitted_hash”,那么我们将在数据库中添加差异,作为行。
如果它们相等,则不需要在这部分采取行动。
最后,我需要使用 ModelName.find(:all, :conditions) ,它现在应该返回与我们的哈希值相同的数量(我已经做到了这一点)。
现在不知何故,我需要同时遍历我们的 ModelName.find 和 params[:subbmited_hash],以便记录 1 被提交 1 替换,然后记录 2 被提交 2 等等。
注意:所以我可以理解我的意图,我正在尝试做的是替换记录而不进行任何不必要的删除,如果有人提交 6 并需要 3,我的代码现在将删除 6,并添加3个新的。这可行,但每次更新时都会永久删除 6 行(在这种情况下)。我希望它删除 3(两个值的差异)并将剩余的 3 更新为新提交的值。