在哪里存储不属于模型或控制器的代码?

时间:2014-03-12 08:27:53

标签: ruby-on-rails ruby

我有一些不属于类或模型的实用方法。

保存此代码的好地方在哪里?我如何用模型调用它?

def get_api
 Clickatell::API.authenticate(ENV['AP_ID'], ENV['PASSWORD'])
end

def send_sms(from, message)
 begin
  api = get_api
  api.send_message(from, message)
 rescue Exception => exc
  logger.error(message + " " + "Message for the log file #{exc.message}")
  render :text => "#{exc.message}", :status => 200
 end 
end

2 个答案:

答案 0 :(得分:4)

将它放在一个类中,将此类放在/ lib文件夹中。然后,您可以将其添加到自动加载路径,如下所示:

config.autoload_paths += %W(#{config.root}/lib)

或者只需要在需要的地方使用它。

如果您包装的功能非常类似(是业务逻辑的一部分),则另一种方法也可以是编写模型。模型不一定必须与数据库表相关。 (虽然我会在下面使用子模块/模型来实现这种功能)

这适用于您在运行中添加的简单小事。如果你要添加更大的东西,那么可能是一个插件或引擎。

答案 1 :(得分:4)

您可以在“lib”目录下或lib的子目录下实现该模块。

在application.rb中,如果将autoload_paths修改为:

 config.autoload_paths += Dir["#{config.root}/lib/**/"]

它会自动加载。

如果您不想更改配置,可以在模型文件的开头要求该文件。

require "relative_path_under_lib"