0

当在我的 rails 应用程序中创建“类别”的活动记录时,我需要通过 rest api 立即将数据发送到外部系统。目前,我在“类别”模型的 after_commit 回调中有其余客户端 api 调用。

这是一般的最佳实践还是有更好的模式可以使用?

如果是这样,我如何防止每次为我的规范为数据库播种时执行 api 调用?

class Category < ActiveRecord::Base

    attr_accessible ............

    ....more stuff....

    after_commit :api_post, on: :create

    def api_post

        ms = RestClient.new()

        ms.post :category, self.to_json(:root => true)

    end

end
4

2 回答 2

0

不要发送它,除非你在production

def api_post

    if Rails.env.production?
        ms = RestClient.new()
        ms.post :category, self.to_json(:root => true)
    end

end

这将跳过它developmenttest环境。可以根据if需要移动支票(如果合适,可能会在周围移动after_commit)。

于 2013-09-13T14:48:37.837 回答
0

我的第一个想法是,您可能应该在控制器而不是模型中进行这些 api 调用,因为它与请求相关(毕竟,控制器都是关于处理请求的)。但这并不能回答你的问题。

我假设您想在生产中使用该播种,否则@Nick 的答案是正确的。

您可以在运行种子任务时传递环境变量:

SEEDING=true rake db:seed

然后,您可以在模型中使用它:

def api_post
  unless ENV[ 'SEEDING' ].present?
    ms = RestClient.new()
    ms.post :category, self.to_json(:root => true)
  end
end

当然不是最优雅的东西,虽然......

于 2013-09-13T14:51:27.353 回答