ruby-on-rails - 将保存回调添加到单个 ActiveRecord 实例,可以吗?

标签 ruby-on-rails ruby activerecord

是否可以为单个 ActiveRecord 实例添加回调?作为进一步的限制,这是继续使用库,所以我无法控制该类(除了对其进行猴子修补)。

这或多或少是我想做的:

def do_something_creazy
  message = Message.new
  message.on_save_call :do_even_more_crazy_stuff
end

def do_even_more_crazy_stuff(message)
  puts "Message #{message} has been saved! Hallelujah!"
end

最佳答案

你可以通过在创建对象后立即向对象添加回调来做类似的事情,就像你说的那样,猴子修补默认的 AR before_save 方法:

def do_something_ballsy
    msg = Message.new
    def msg.before_save(msg)
        puts "Message #{msg} is saved."
        # Calls before_save defined in the model
        super
    end
end

关于ruby-on-rails - 将保存回调添加到单个 ActiveRecord 实例,可以吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2494203/

相关文章:

ruby-on-rails - 在 Ruby on Rails 中将纯文本 URL 转换为 HTML 超链接?

ruby-on-rails - Ruby on Rails,脚本/延迟作业启动。什么都没发生

ruby-on-rails - 将默认参数添加到 Rails 中的命名路由助手中

ruby-on-rails - 编写一个带有身份验证的 Ruby/Rake 任务机器人来下载需要登录的数据

sql - 联接表记录不存在的Active Record

ruby-on-rails - 在没有模型的情况下访问 ActiveRecord 关联

ruby-on-rails - 错误:执行 gem 时...(OpenSSL::X509::StoreError)

ruby - 检查测试是否失败并相应地给出控制台输出

ruby-on-rails - 在 Ruby 中编译 Assets 是否需要在部署时完成?为什么之前不呢?

ruby-on-rails - Heroku 登台应用程序是否与评论应用程序共享数据库?