【问题标题】:Building a simple calculator form in Rails 4在 Rails 4 中构建一个简单的计算器表单
【发布时间】:2015-06-08 23:17:23
【问题描述】:

我希望在 Rails 4 应用程序中构建一组简单的计算器,但我对如何设置模型和控制器有点茫然。

在此示例中,我有一系列计算器,它们将具有非常相似但在某些情况下略有不同的输入/变量和略有不同的计算方法。

我的第一次尝试是简单地创建一个没有模型的计算器控制器,但很快就迷失了在哪里处理表单参数和计算逻辑等事情。

考虑到计算器需要一些稍微不同的输入和计算方法,创建模型对我来说也没什么意义。

最后,在这种情况下,创建多个模型似乎也是一种极其混乱的方法。

因此,考虑到所有这些,我想知道是否有人可以向我展示 Rails 的方法,以了解我应该如何解决这个问题。如果它有助于获得更多信息,我希望构建以下电子表格中的相同方法:http://www.widerfunnel.com/proof/roi-calculators

任何帮助将不胜感激!

【问题讨论】:

  • 您是否需要将任何输入或结果保存到数据库中以供将来检索,或者计算是在没有持久性的情况下即时完成的?
  • 不需要保存任何结果,因此我认为我不需要模型。但是,如果这样做更容易,我也不一定会感到沮丧。
  • 根据我在这些计算器中看到的情况,我认为这不是必须在 Rails 中完成的原因,而是使用 javascript 更容易实现,假设您是任何开发人员都可以访问计算,并且您不需要保留有关正在执行的计算的任何统计信息。但是,如果您确实想在 Rails 中完成所有工作,我建议由非模型类支持的一系列控制器操作可能是最简单的方法。

标签: ruby-on-rails ruby ruby-on-rails-4 activerecord strong-parameters


【解决方案1】:

您应该记住,Rails 不仅仅是关于 MVC。您可以创建自定义类,并在模型或控制器中使用它们。

在这种情况下,您可以在 app/lib 中创建一个 Calculator 类并在控制器中使用它。例如:

# app/lib/calculator.rb
class Calculator
  def self.sum(a, b)
    a.to_i + b.to_i
  end

  def self.subtr(a, b)
    a.to_i - b.to_i
  end
end

.

# app/controllers/calculator_controller
class CalculatorController < ApplicationController
  def index
  end

  def new
    @result = Calculator.send(params[:operation], *[params[:a], params[:b]])
    render :index
  end

end

.

# app/views/calculator/index.html.erb
<%= form_for :calculator, url: { action: :new }, method: :get do |f|   %>
  <%= number_field_tag :a, params[:a] %>
  <%= select_tag :operation, options_for_select([['+', :sum], ['-',    :subtr]], params[:operation]) %>
  <%= number_field_tag :b, params[:b] %>
  <%= f.submit 'Calculate!' %>
<% end %>

<% unless @result.nil? %>
  <p> = <%= @result %> </p>
<% end %>

这只是一个非常简单的示例,说明可以通过创建自己的类并在 Rails 上使用它们来做什么。

;)

【讨论】:

  • 超级愚蠢的问题,但我如何将@result 传递给索引操作。目前为零。
  • 好吧,我不太确定您要做什么...在这种情况下,index 操作仅用于呈现 index 视图,而 @ 987654326@ 操作用于执行计算并渲染注入@result 变量的index 视图。这就是为什么最初,@result 为 nil。
猜你喜欢
  • 1970-01-01
  • 2017-12-02
  • 2015-09-18
  • 1970-01-01
  • 2021-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多