كيفية حساب الفرق من حقلين على شكل إرسال روبي على القضبان

StackOverflow https://stackoverflow.com/questions/1330273

سؤال

أنا جديد على روبي على القضبان واستخدم السقالات. في أحد النماذج التي أريد أن أكون قادرا على تناول حقلين ثم لديك الفرق بين الاثنين المقدمة إلى قاعدة البيانات.

بدلا من: 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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top