Ruby on rails 我应该将我自己的非模型/视图/控制器类放在哪里?

Ruby on rails 我应该将我自己的非模型/视图/控制器类放在哪里?,ruby-on-rails,ruby,testing,ruby-on-rails-4,Ruby On Rails,Ruby,Testing,Ruby On Rails 4,在我的应用程序中,我想定义一个我的模型、视图和控制器将使用的类。我的想法是创建一个新目录,app/lib,在这里我创建了: # /app/lib/donut.rb class Donut def initialize(sprinkle_color) @sprinkle_color = sprinkle_color end def sprinkle_color @sprinkle_color end end 现在这很好,但是当我添加test/lib时,当我运行r

在我的应用程序中,我想定义一个我的模型、视图和控制器将使用的类。我的想法是创建一个新目录,
app/lib
,在这里我创建了:

# /app/lib/donut.rb
class Donut
  def initialize(sprinkle_color)
    @sprinkle_color = sprinkle_color
  end

  def sprinkle_color
    @sprinkle_color
  end
end
现在这很好,但是当我添加
test/lib
时,当我运行
rake test
时,这些测试不会运行。我可以运行
raketest:all
,它可以工作,但感觉不正确

这是放置类的正确位置吗?如果是,我如何让它们进入测试


还有,为什么我需要这样的课程?当然,我并不是在做甜甜圈。它是一个接受一组参数的类,许多模型都有这些对象。此外,还有一些视图获取这些对象或这些对象的数组。最后,还有一些代码对这些对象的列表进行操作,我将这些代码作为静态方法放入此类中。

在应用程序目录中为自定义类创建文件夹,但尽量使其具有描述性。例如,我使用自定义类为ajax加载正确格式化json,因此类位于
app>datatables

app>datatables>users_datatable.rb

class UsersDatatable
  [...]
end
因此,在控制器操作中,我可以使用自定义类渲染视图:

respond_to  do |format|
  format.html
  format.json { render json: UsersDatatable.new(view_context, current_user) }
end
下面是用于生成pdf视图的另一个示例:

app>pdfs>quote_pdf.rb

class QuotePdf < Prawn::Document
  [...]
end
测试很容易。因为我使用的自定义类与其他资源相关联,所以我将测试包含在其中。i、 e.与用户,报价。但是,您可以创建单独的测试,就像您所做的那样,以便能够单独运行它们


我认为
app>lib
不够描述性。如果可能的话,试着更具体地说明自定义类实际上在做什么。

I真的不喜欢使用“lib”。相反,我建议使用通用设计模式作为其他PORO的顶级目录名。我在Rails项目中这样做。所以我有这样的东西:

app/
  models/
  controllers/
  services/
  policies/
  validators/
等等


这里有一个很好的展示:

我可能会把它放在
lib
目录中(不在
app
中)。这个问题可能提供更多的见解:谢谢,我将把
lib
重命名为更具描述性的内容。但是假设我将其重命名为
甜点
:我如何让
测试/甜点/甜甜圈测试.rb
作为
rake测试
的一部分运行?我不确定在使用rspec时是否专门针对
rake测试
。但是我要说的是,
测试/甜点/
不会自动包含在内。因此,您必须在
test\u helper.rb
文件中指定需要的新目录。e、 g.
Dir[Rails.root.join(“test/coffice/***.rb”)。
app/
  models/
  controllers/
  services/
  policies/
  validators/