在我的应用程序中,我想定义一个我的模型、 View 和 Controller 将使用的类。我的想法是创建一个新目录,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
时,这些测试不会运行。我可以运行 rake test:all
可以运行,但感觉不对。
这是放置类的正确位置吗?如果是这样,我如何让它们进入测试?
附言为什么我需要这样的类(class)?当然,我实际上并不是在制作 donut 。它是一个带有一组参数的类,并且有许多模型都具有这些对象。此外,还有采用这些对象或这些对象的数组的 View 。最后,还有对这些对象的列表进行操作的代码,我已将该代码作为静态方法放入此类中。
最佳答案
在 app 目录中为自定义类创建文件夹,但尽量使它们具有描述性。例如我使用自定义类来正确格式化 json 以进行 ajax 加载 datatables所以这些类位于 app>datatables
例如
app>datatables>users_datatable.rb
class UsersDatatable
[...]
end
因此在 Controller 操作中我可以使用自定义类呈现 View :
respond_to do |format|
format.html
format.json { render json: UsersDatatable.new(view_context, current_user) }
end
这是另一个使用 prawn pdf 的示例生成 pdf View :
app>pdfs>quote_pdf.rb
class QuotePdf < Prawn::Document
[...]
end
在 Controller Action 中:
respond_to do |format|
format.html
format.pdf do
pdf = QuotePdf.new(view_context, @quote)
send_data pdf.render, filename: "quote_#{@quote.number}.pdf",
type: "application/pdf",
disposition: "inline"
end
end
测试很容易。由于我使用的自定义类与其他资源相关联,因此我将测试包含在其中。即与用户,报价。但是,您可以像之前那样创建单独的测试,以便能够单独运行它们。
我认为 app>lib
的描述性不够。如果可能,请尝试更具体地说明自定义类实际在做什么。
关于ruby-on-rails - 我应该把我自己的不是模型/ View / Controller 的类放在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24601221/