私はRuby on Railsを初めて使用しており、足場を使っています。フォームの1つでは、2つのフィールドを持つことができ、2つのフィールドの違いをデータベースに提出することができます。フォーム上の2つのフィールドの差分を計算する方法Ruby on Railsをサブミットする方法
の代わりに:pickupamount、私は(終了額 - 開始金額)を計算し、私のデータベースのpickupamount列に入力します。
ありがとうございます!あなたのビューで
私はRuby on Railsを初めて使用しており、足場を使っています。フォームの1つでは、2つのフィールドを持つことができ、2つのフィールドの違いをデータベースに提出することができます。フォーム上の2つのフィールドの差分を計算する方法Ruby on Railsをサブミットする方法
の代わりに: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
あなたのモデルや、あなたのコントローラのいずれかでこれを行うことができます。 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
サラに感謝、これは、simliar問題への答えを探して見つけました。 ActiveRecordコールバックは私の問題を解決するために必要なものです。 – brad
質問には、終了金額 - 開始金額が記載されていますが、反対に表示されます。 –
、感謝サラ –