Wie Differenz von zwei Feldern auf dem Formular berechnen einreichen Ruby on Rails
-
19-09-2019 - |
Frage
Ich bin neu in Ruby on Rails und haben Gerüste im Einsatz. Auf einer der Formen möchte ich in der Lage sein, zwei Felder zu haben, und dann haben den Unterschied zwischen den beiden an die Datenbank übermittelt.
Statt: pickupamount, ich will (Ending Betrag - Startbetrag) berechnet und in die pickupamount Spalte meiner Datenbank eingegeben werden
.Vielen Dank im Voraus!
Lösung
In Ihrer Ansicht:
form_tag '/some_action' do
text_field_tag 'start_amount'
text_field_tag 'end_amount'
end
In Ihrem Controller:
def create
model = Model.new
model.pickupamount = params[:end_amount].to_i - params[:start_amount].to_i
model.save!
end
Andere Tipps
Sie können dies entweder in Ihrem Modell oder den Controller. Geht zusammen mit dünnem Controller-Fat Modell , könnte es besser die Funktionalität in Ihrem Modell zu setzen. Schauen Sie sich Active Rückrufe .
class MyModel < ActiveRecord::Base
attr_accessor :start_amount, :end_amount
before_create :calculate_pickup_amount
private
def calculate_pickup_amount
self.pickupamount = end_amount.to_i - start_amount.to_i
end
end
Dann in Ihrem Controller:
def create
# Assuming params[:my_model] has all the data for initializing a MyModel,
# including start_amount and end_amount but not pickupamount:
my_model = MyModel.new(params[:my_model])
if my_model.save
# Yay, do something
else
# Fail, do something else
end
end
Es könnte nützlich sein, um die folgenden Erweiterungsmethode Rubys String
Klasse gehören (dank Sikelianos < vielleicht in einer Datei in Ihrer Rails-App lib / a>),:
class String
def numeric?
Float self rescue false
end
end
Dann könnte man eine Prüfung vor Einstellung pickupamount
ausführen:
def calculate_pickup_amount
if end_amount.numeric? && start_amount.numeric?
self.pickupamount = end_amount.to_i - start_amount.to_i
else
# Throw exception, set some default value, etc.
end
end