我需要帮助我认为应该是ActiveRecord回调。
我想要实现的是,每次保存特定记录时,ActiveRecord实际上会在同一个表中保存2条记录。
我会远离我想要的原因,应该知道每个事务需要在同一个表中保存2个单独但相似的记录。
示例:
0)我有一个名为“链接”的表格,用于存储与其他人相关联的人。它看起来像这样:
+----+-----------+---------------+-------------+
| id | person_id | origin_person | rcvd_person |
+----+-----------+---------------+-------------+
1)网络应用程序用户将进入发起人和接收人(发起或接收链接)。此时“person_id”为空白:
+----+-----------+---------------+-------------+
| id | person_id | origin_person | rcvd_person |
+----+-----------+---------------+-------------+
| 1 | | 5 | 10 |
+----+-----------+---------------+-------------+
2)在记录保存之前,我需要将“origin_person”的值复制到“person_id列:
+----+-----------+---------------+-------------+
| id | person_id | origin_person | rcvd_person |
+----+-----------+---------------+-------------+
| 1 | 5 | 5 | 10 |
+----+-----------+---------------+-------------+
3)最后,保存记录后,我需要保存重复记录,但将“rcvd_person”值复制到“person_id”:
+----+-----------+---------------+-------------+
| id | person_id | origin_person | rcvd_person |
+----+-----------+---------------+-------------+
| 1 | 5 | 5 | 10 |
+----+-----------+---------------+-------------+
| 2 | 10 | 5 | 10 |
+----+-----------+---------------+-------------+
这正是我想要做的,所以如果你能帮助我了解如何实现这一目标,那将是值得赞赏的。
我宁愿把所有这些都放在Rails视图中,因为我不想隐藏字段和什么不闲逛。
我试图解决这个问题时遇到的一个问题是它会循环。我写了一些代码(不起作用),一旦保存记录就会创建一条新记录,但是每次保存都会触发一条新记录,这是一个新的保存....
答案 0 :(得分:1)
您可以在模型中添加一个标记,该标记可用于防止行重复。这样,当您创建一个新条目时,它会被调用after_ * callback并在其中创建一个新对象并设置复制标志以防止进一步复制。
有些事情:
def Link
after_create :duplicate_link
attr_accessible :stop_duplication
private
def duplicate_link
unless stop_duplication
new_link = Link.new
# set all the link attrs here
new_link.stop_duplication = true
new_link.save
end
end
end
(当然这段代码没有经过测试,我只想说明如何完成)
话虽这么说,我真的会想到为什么以及我是否需要这种行为。在我看来,如果你需要它可能会出现其他问题。