كيفية حساب الفرق من حقلين على شكل إرسال روبي على القضبان
-
19-09-2019 - |
سؤال
أنا جديد على روبي على القضبان واستخدم السقالات. في أحد النماذج التي أريد أن أكون قادرا على تناول حقلين ثم لديك الفرق بين الاثنين المقدمة إلى قاعدة البيانات.
بدلا من: pickupamount، أريد حساب (إنهاء المبلغ - مبلغ البداية) وإدخاله في عمود Pickupamount الخاص بي.
شكرا لك مقدما!
المحلول
في رأيك:
form_tag '/some_action' do
text_field_tag 'start_amount'
text_field_tag 'end_amount'
end
في جهاز التحكم الخاص بك:
def create
model = Model.new
model.pickupamount = params[:end_amount].to_i - params[:start_amount].to_i
model.save!
end
نصائح أخرى
يمكنك القيام بذلك في نموذجك أو وحدة التحكم الخاصة بك. الذهاب جنبا إلى جنب مع نحيل تحكم نموذج الدهون, ، قد يكون من الأفضل وضع الوظيفة في النموذج الخاص بك. الدفع activerecord ردود.
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
ثم، في جهاز التحكم الخاص بك:
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
قد يكون من المفيد تضمين طريقة التمديد التالية ل Ruby's String
الطبقة (بفضل سيكيليانوس)، ربما في ملف في دليل تطبيق القضبان الخاص بك:
class String
def numeric?
Float self rescue false
end
end
ثم يمكنك إجراء فحص قبل الإعداد pickupamount
:
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
لا تنتمي إلى StackOverflow