作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在创建一个用作支付服务接口(interface)的 rails 引擎。我必须处理支付服务在任何交易之外向我发送消息的用例。
我将采用以下用例:
引擎收到一条消息,表明订阅 FooBar42 已正确计费(通过它自己的路线)。我的引擎下一步做什么?
如果我开始调用特定于我的应用程序的模型,我的引擎只适用于这个应用程序。
我能找到的唯一示例是设计,但在设计中,它只是向您的用户模型添加方法,引擎处理用户的存储方式和所有代码。
如何创建一个可重用系统,让我的引擎可以在主应用程序中调用/触发代码?
我是否覆盖引擎 Controller ?我是否会生成一个带有空方法的服务对象,用作引擎-应用程序通信系统?
最佳答案
您需要有一种方法可以在初始化程序中或通过调用模型中的类方法来配置引擎,就像在调用 devise
时如何配置 Devise 以使用用户模型一样。在 User 类的主体中:
class User < ActiveRecord::Base
devise :database_authenticatable
end
class Configuration
attr_reader :models_to_interact_with
def initialize
@models_to_interact_with = []
end
end
require 'my_engine/configuration'
module MyEngine
mattr_reader :config
def self.configure(&block)
self.config ||= Configuration.new
block.call self.config
end
end
config/initializers/my_engine.rb
中创建一个初始化程序。并将模型添加到您的配置中:
MyEngine.configure do |config|
config.models_to_interact_with << User
config.models_to_interact_with << SomeOtherModel
end
# in some controller in your engine:
def payment_webhook
MyEngine.config.models_to_interact_with.each do |model|
model.send_notification_or_something!
end
end
关于ruby-on-rails - 如何让 Rails 引擎与主应用程序交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24936813/
我是一名优秀的程序员,十分优秀!