2009-08-25 10 views
2

私はRuby on Railsを初めて使用しており、足場を使っています。フォームの1つでは、2つのフィールドを持つことができ、2つのフィールドの違いをデータベースに提出することができます。フォーム上の2つのフィールドの差分を計算する方法Ruby on Railsをサブミットする方法

の代わりに:pickupamount、私は(終了額 - 開始金額)を計算し、私のデータベースのpickupamount列に入力します。

ありがとうございます!あなたのビューで

答えて

0

:あなたのコントローラで

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 
+0

質問には、終了金額 - 開始金額が記載されていますが、反対に表示されます。 –

+0

、感謝サラ –

2

あなたのモデルや、あなたのコントローラのいずれかでこれを行うことができます。 Skinny Controller Fat Modelに沿って、モデルに機能を追加する方が良いかもしれません。チェックアウト:ActiveRecord callbacks

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 

おそらくあなたのRailsアプリケーションのlibディレクトリ内のファイルには、RubyのStringクラス(sikelianosのおかげで)に次の拡張メソッドを含めるように役に立つかもしれません:

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 
+0

サラに感謝、これは、simliar問題への答えを探して見つけました。 ActiveRecordコールバックは私の問題を解決するために必要なものです。 – brad

関連する問題