mysql - Rails 中的 after_create 使用手动 SQL 查询

标签 mysql ruby-on-rails activerecord after-create

我尝试在创建另一个对象后创建一个对象,但是后一个对象是使用 SQL 查询而不是 ActiveRecord 查询创建的。

当创建 xyz 的新实例时,我尝试创建一个 EventCode,如下所示:

class xyz < abc

  after_create :create_event_code

  def create_event_code
    event = UtilityDrEvent.find(self.utility_dr_event_id)
    participant = ParticipantAccount.find(self.participant_account_id)
    EventCode.generate_and_save(event, participant)
  end
end

但是 xyz 的新实例是这样创建的:

insert_sql = 'INSERT INTO xyz (a_id, b_id)'

因此 after_create 方法永远不会被调用。我怎样才能让它发挥作用?

最佳答案

仅当您使用 ActiveRecord 本身创建模型时才会调用 ActiveRecord 触发器。它没有任何观察数据库变化的代码。因此,如果您想在另一个表中触发创建,您需要将插入触发器放置在数据库本身中。

试试这个 gem https://github.com/jenseng/hair_trigger这将帮助您从 Rails 代码中将触发器写入数据库。

关于mysql - Rails 中的 after_create 使用手动 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29760014/

相关文章:

php - 我应该在 PHP 中使用单独的变量来定义我的 SQL 语句句柄吗?

javascript - 如何在命令上应用 imgix-js?

ruby-on-rails - 将 acts_as_taggable 移动到包含的模块中时出错

php - Codeigniter:对字段中的记录内容求和

mysql - 使用 sqitch 中的 mysql 查询验证表不存在

mysql - 使用UNION ALL选择的疑问

MySql 连接丢失 Delphi

javascript - 在 Javascript 中访问 Ruby 变量

ruby-on-rails - Rspec 使用开发数据库

ruby-on-rails - Rails 事件记录查找 ( :all, :order => ) 问题