Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
保存之后,创建之后(订单)(RubyonRails)_Ruby_Ruby On Rails 3 - Fatal编程技术网

保存之后,创建之后(订单)(RubyonRails)

保存之后,创建之后(订单)(RubyonRails),ruby,ruby-on-rails-3,Ruby,Ruby On Rails 3,(Ruby on rails) 我有一个注册表,它将数据从该表单保存到一个表和另一个表。我使用hooks、“在保存后:处理字段到另一个表””和“在创建后:发送注册邮件””在用户注册后向用户发送邮件 不幸的是,“after\u create”在“after\u save”之前起作用,但我需要:在保存过程发生后发送注册电子邮件。我正在考虑在“之后创建””中运行:将\u字段\u处理到另一个\u表中,但它会连续运行两次,这没有多大意义 在本例中,我如何指示“在保存后””在“在创建后””之前运行?还有更好

(Ruby on rails)

我有一个注册表,它将数据从该表单保存到一个表和另一个表。我使用hooks、“
在保存后:处理字段到另一个表”
”和“
在创建后:发送注册邮件”
”在用户注册后向用户发送邮件

不幸的是,“
after\u create
”在“
after\u save
”之前起作用,但我需要
:在保存过程发生后发送注册电子邮件
。我正在考虑在“
之后创建”
”中运行
:将\u字段\u处理到另一个\u表中,但它会连续运行两次,这没有多大意义

在本例中,我如何指示“
在保存后”
”在“
在创建后”
”之前运行?还有更好的建议吗?我在保存之前尝试了“
”,在创建之前尝试了“
”,但似乎处理不正确


有什么建议吗

您可以通过组合使用创建后
和更新后
回调来分离调用

after_create :process_field_to_another_table, :send_registration_email
after_update :process_field_to_another_table

这样,在
发送注册\u电子邮件之前调用另一个\u表的
处理\u字段
,您可以在创建后使用
和更新后使用
回调组合来分离调用

after_create :process_field_to_another_table, :send_registration_email
after_update :process_field_to_another_table

这样,
process\u field\u to\u另一个\u表
send\u registration\u email
之前被调用,您可以将两个钩子放在一个钩子中

after_save :foo

def foo
  process_field_to_another_table
  send_registration_email if id_changed?  # id will change only for new record.
end

你可以把两个钩子合在一起

after_save :foo

def foo
  process_field_to_another_table
  send_registration_email if id_changed?  # id will change only for new record.
end

id\u changed?
是rails中的方法还是自定义方法?我想
{field\u name}\u changed?
在保存之前适用于
。记录保存后将丢失更改历史记录。您检查过了吗?请参见:您可以在保存之前编辑
的答案,但在创建记录之前,您不能拥有
id
。所以你不能这样做。
id\u changed?
是rails中的方法还是自定义方法?我猜
{field\u name}\u changed?
在保存之前适用于
。记录保存后将丢失更改历史记录。您检查过了吗?请参见:您可以在保存之前编辑
的答案,但在创建记录之前,您不能拥有
id
。所以您不能这样做。此解决方案将导致进程\u字段\u到另一个\u表运行两次,但谢谢您,我更改了id\u?不会的。after_update仅在对象更新且未创建时运行。此解决方案将导致进程_字段_到另一个_表运行两次,但谢谢,我更改了id_?不,不会。after_update仅在对象已更新且未创建时运行。