Ruby on Rails를 처음 사용하고 스캐 폴딩을 사용하고 있습니다. 양식 중 하나에서 나는 두 개의 필드를 가질 수 있고 두 개의 차이점을 데이터베이스에 제출할 수 있기를 원합니다.폼에서 두 필드의 차이를 계산하는 방법 Ruby on Rails를 제출하는 방법
대신 : pickupamount, (종료 금액 - 시작 금액)을 계산하여 내 데이터베이스의 pickupamount 열에 입력하고 싶습니다.
미리 감사드립니다. 보기에
Ruby on Rails를 처음 사용하고 스캐 폴딩을 사용하고 있습니다. 양식 중 하나에서 나는 두 개의 필드를 가질 수 있고 두 개의 차이점을 데이터베이스에 제출할 수 있기를 원합니다.폼에서 두 필드의 차이를 계산하는 방법 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
아마도 당신의 레일 응용 프로그램의 lib 디렉토리에있는 파일, 루비의 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
감사합니다. Sarah가이 문제에 대한 답을 찾기 위해 우연히 만났습니다. ActiveRecord 콜백은 내 문제를 해결하는 데 필요한 것입니다. – brad
질문에 끝나는 금액 - 시작 금액, 그리고 그 반대를 보여줍니다. –
감사합니다. Sarah에게 감사합니다. –