ruby-on-rails - 我应该把我自己的不是模型/ View / Controller 的类放在哪里?

标签 ruby-on-rails ruby testing ruby-on-rails-4

在我的应用程序中,我想定义一个我的模型、 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/

相关文章:

java - 使用测试用例数组调用 java 方法

wcf - 无法获取 WCF 测试客户端来测试 WCF 服务库

ruby-on-rails - ruby 类变量是否在 Rails 请求之间被清除?

ruby-on-rails - 为什么 link_to 在访问 View 时在其中运行一个方法?

ruby-on-rails - 获取 state_machine 状态列表

ruby - 运行所有 rake 任务?

javascript - 使用 RoR 创建单页应用程序

ruby-on-rails - ActiveRecord:用户特定的验证

javascript - ruby 数组到 javascript - Rails

python - Octave 测试模块