Ruby on rails 在Rails 4中构建一个简单的计算器窗体
我希望在Rails 4应用程序中构建一套简单的计算器,但对于如何设置模型和控制器,我有点不知所措 在本例中,我有一系列计算器,它们的输入/变量非常相似,但在某些情况下略有不同,计算方法也略有不同 我的第一次尝试是简单地创建一个没有模型的计算器控制器,但很快就迷失了在哪里处理表单参数和计算逻辑之类的事情 创建一个模型对我来说也没有什么意义,因为计算器需要一些稍微不同的输入和计算方法 最后,在这个场景中,创建多个模型似乎也是一种非常混乱的方法 因此,考虑到所有这些,我想知道是否有人能告诉我如何处理这个问题。如果有助于获得更多信息,我希望建立与以下电子表格相同的方法:Ruby on rails 在Rails 4中构建一个简单的计算器窗体,ruby-on-rails,ruby,ruby-on-rails-4,activerecord,strong-parameters,Ruby On Rails,Ruby,Ruby On Rails 4,Activerecord,Strong Parameters,我希望在Rails 4应用程序中构建一套简单的计算器,但对于如何设置模型和控制器,我有点不知所措 在本例中,我有一系列计算器,它们的输入/变量非常相似,但在某些情况下略有不同,计算方法也略有不同 我的第一次尝试是简单地创建一个没有模型的计算器控制器,但很快就迷失了在哪里处理表单参数和计算逻辑之类的事情 创建一个模型对我来说也没有什么意义,因为计算器需要一些稍微不同的输入和计算方法 最后,在这个场景中,创建多个模型似乎也是一种非常混乱的方法 因此,考虑到所有这些,我想知道是否有人能告诉我如何处理这
任何帮助都将不胜感激 您应该记住,Rails不仅仅是关于MVC的。您可以创建自定义类,并在模型或控制器中使用它们 在这种情况下,您可以在app/lib中创建一个计算器类,并在控制器中使用它。例如:
# 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
#应用程序/控制器/计算器#控制器
类计算器控制器<应用程序控制器
def索引
结束
def新
@结果=计算器.send(参数[:操作],*[params[:a],params[:b]]
渲染:索引
结束
结束
#app/views/calculator/index.html.erb
=
这只是一个非常简单的例子,说明通过创建自己的类并在Rails上使用它们可以做什么
)() 您是否需要将任何输入或结果保存到数据库以备将来检索,或者计算是在没有持久性的情况下进行的?不需要保存任何结果,因此我认为不需要模型。然而,如果这样做更容易,我也不一定会感到不安。根据我在这些计算器中看到的情况,我不认为有必要在rails中完成这项工作,相反,使用javascript更容易实现,假设您同意任何开发人员都可以访问计算,并且不需要保留任何有关正在执行的计算的统计信息。但是,我建议,如果您确实想承担Rails中的所有工作,那么由非模型类支持的一系列控制器操作可能是最简单的方法。超级愚蠢的问题,但是我如何将@result传递给索引操作呢。现在是零。嗯,我真的不确定你想做什么。。。在此上下文中,
索引
操作仅用于呈现索引
视图,而新建
操作用于执行计算并呈现注入@结果
变量的索引
视图。这就是为什么最初,@结果为零。
# 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 %>