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/