3

Я ищу, чтобы создать простой набор калькуляторов в приложении Rails 4, и я немного теряю, как мне следует настраивать свои модели и контроллеры.Создание простой формы калькулятора в Rails 4

В этом примере у меня есть серия калькуляторов, которые будут иметь очень похожие, но в некоторых случаях несколько разные входы/переменные и несколько разные методы расчета.

Моя первая попытка состояла в том, чтобы просто создать контроллер калькулятора без модели, но быстро потерялся относительно того, где я буду обрабатывать такие вещи, как параметры формы и логика расчета.

Создание модели также не имеет для меня никакого смысла, учитывая, что калькуляторы требуют немного разных входов и методов расчета.

Наконец, создание нескольких моделей также показалось крайне беспорядочным подходом здесь в этом сценарии.

Так что, учитывая все это, мне было интересно, может ли кто-нибудь показать мне путь Rails относительно того, как я должен подходить к этой проблеме. Если это поможет получить дополнительную информацию, я хотел бы разработать тот же подход, который содержится в следующем наборе электронных таблиц: http://www.widerfunnel.com/proof/roi-calculators

Любая помощь была бы серьезно оценена!

+0

вам нужно сохранить любой из входов или результатов в базу данных для последующего поиска, или расчеты делается на лету, без упорства ли? – bdx

+0

Не нужно сохранять какие-либо результаты, поэтому я думал, что мне не нужна модель. Однако, если это легче сделать так, то я тоже не буду расстроен. – Mhoad

+0

Основываясь на том, что я вижу в этих калькуляторах, я не вижу причины, что это обязательно нужно делать в рельсах, скорее это может быть легче достигнуто с помощью javascript, предполагая, что вы в порядке, при этом вычисления доступны любые разработчики, и вам не нужно сохранять статистику об выполненных вычислениях. Однако я бы предположил, что ряд действий контроллера, поддерживаемых немодельными классами, может быть самым простым способом, если вы захотите выполнить всю работу в Rails. – bdx

ответ

6

Вы должны иметь в виду, что Rails - это не только MVC. Вы можете создавать свои пользовательские классы и использовать их в модели или контроллере.

В этом случае вы можете создать класс калькулятора внутри приложения/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 

.

# 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 %> 

Это просто очень простой пример того, что можно сделать путем создания собственных классов и использовать их на рельсы.

;)

+0

Супер глупый вопрос, но как передать @result в действие индекса. В настоящее время это ничто. – Mhoad

+1

Ну, я не совсем уверен в том, что вы пытаетесь сделать ... В этом контексте действие 'index' используется только для отображения представления' index', а действие 'new' используется для выполнения вычислять и отображать представление 'index', вставляя переменную' @ result'. Вот почему, изначально, @result - это нуль. – juliobetta

Смежные вопросы