2017-06-15 3 views
-3

Ich muss eine Ganzzahl (@integer) aus dem Formular in meinem Stammpfad abrufen, Multiplikation (@ Integer * 45) und das Ergebnis auf der gleichen Seite anzeigen. Wie kann ich es ohne irgendwelche Modelle in meiner Anwendung tun? Bitte teilen Sie Ihre Best Practice. Vielen Dank!Wie wird die Berechnung ohne Modelle in Rails durchgeführt?

ich als nächstes zu tun versuchte:

CalculatorsController

def calculation 
    @integer = params[:integer] 
    @result = @integer*45 
end 

def result 
end 

root.rb

root :to => 'calculators#result' 
resources :calculators, :collection=>{:result => :get, :calculation => :post} 

Rechner/result.html.erb

<% form_tag root_path, :html => {:method => :post} do %> 
    <%= label_tag 'integer' %> 
    <%= text_field_tag :integer %> 

    <div><%= submit_tag 'OK' %></div> 
<% end %> 
+0

Könnten Sie bitte teilen, was Sie bisher versucht haben? – Bustikiller

+0

Siehe [* form_tag *] (https://apidock.com/rails/ActionView/Helpers/FormTagHelper/form_tag) mit der Option "remote". – Pavan

+0

@Pavan: 'remote: true' ist irrelevant hier –

Antwort

1

Ich werde es tun mit Ajax, so gibt es keine Notwendigkeit für Aktualisierung der Seite:

zuerst die Routen aktualisieren, für Ihr Beispiel zwei Strecken nur benötigen, ein get (oder root) und ein post.

routes.rb:

Rails.application.routes.draw do 
    root 'calculators#result' 
    post 'calculators/calculation' 
end 

Als Nächstes aktualisieren Sie Ihre Ansicht:

  1. Ändern Sie die URL in Ihren form_tag wo die Daten (zu calculation Aktion statt result) gesendet werden.
  2. Fügen Sie die Option remote: true hinzu, um ajax zu aktivieren.
  3. Fügen Sie ein Tag hinzu, in dem Sie Ihr Ergebnis anzeigen.

result.html.erb:

<% form_tag calculators_calculation_url, remote: true do %> 
    <%= label_tag 'integer' %> 
    <%= text_field_tag :integer %> 

    <div><%= submit_tag 'OK' %></div> 
<% end %> 

<div id="total"></div> 

und einen Blick für calculation Aktion erstellen, aber da Sie AJAX verwenden, werden Sie es als js.erb und umfassen die erforderliche Javascript (oder jQuery) erstellen Aktualisieren Sie Ihre Ansicht (ich verwende jQuery im Beispiel).

Berechnung.js.erb: Jetzt

$('#total').html('<%= @result %>') 

wenn Sie submit klicken, wird Ihre Form calculation Aktion gesendet werden und wird die div mit @result aktualisieren.

0

Ihre Ergebnisansicht (result.html.erb) erhält seine Daten aus dem Ergebnis Methode, nicht Berechnung. Aktualisieren Sie Ihre Controller wie folgt:

def calculation 
     @integer = params[:integer] 
    end 

    def result 
     @result = @integer*45 
    end 

Sie dann einen Tag brauchen Ihr Ergebnis in der Ansicht angezeigt werden, so etwas wie:

<p> <%= @result %> </p> 
1

einfach das Feld zum Formular hinzufügen ...

<% form_tag root_path, :html => {:method => :post} do %> 
    <%= label_tag 'integer' %> 
    <%= text_field_tag(:integer, @integer) %> 

    <% if @result.present? %> 
     <br> 
     Result is: <%= @result %> 
     <br/> 
    <% end %> 

    <div><%= submit_tag 'OK' %></div> 
<% end %> 

Und dann Ergebnis in Ihrem berechnen machen ...

def calculation 
    @integer = params[:integer].to_i 
    @result = @integer*45 
    render :result 
end 
Verwandte Themen