我在哪里放置非模型类?

时间:2014-05-27 16:04:54

标签: ruby-on-rails

我应该在哪里放置非模型的简单类(它们不代表任何数据)并仅提供某些功能?

例如:

class FileUploader

  def save_uploaded_file(filename, tempfile)
    path = Rails.root.join('public', 'uploads', filename)
    File.open(path, 'wb+') do |file|
      file.write(tempfile.read)
    end
  end
end

这样做只是将文件复制到预定义的位置。

我必须将其放在models下吗?或者Rails是否有其他位置更适合这类课程?我之前试过放入lib,但是由于Rails缓存了lib目录中的文件(编辑后的配置不缓存文件,但它仍然缓存在{{1}内部),这太痛苦了。 })。

所以,我将这些文件放在lib中,但测试变得非常痛苦(我刚刚开始使用Rails,也许我在测试中做错了)因为rake吐出了没有设置的错误测试数据库(我想测试任何形式或形状与数据库无关的类 - 为什么我需要设置数据库?)。

2 个答案:

答案 0 :(得分:4)

我已经将app/lib添加到我的某些项目中以适应这种情况,但还有新的Rails 4 concerns位置,例如app/models/concernsapp/controllers/concerns,具体取决于在哪里使用这种东西。

你是对的,最好避免在app/models中放入非模型类。

答案 1 :(得分:2)

对于服务类型对象,我将它们放在app / services中。

对于模型类型的对象,我将它们放在app / models中。我不认为有必要继承ActiveRecord作为模型。

我认为你的对象被归类为“服务对象”,因为它被设计为包装上传文件的服务,它实际上不是像模型那样的域对象。