2014-11-17 5 views
0

내 레일 애플 리케이션은 운영자의 모델과 예약 모델을 가지고 있으며, 그들은 다음과 같은 관계에 의해 관련 : 더 사용자가 특정 날짜와 시간에 택시를 찾을 수 있습니다데이터베이스의 매개 변수를 레일에 저장하려면 어떻게합니까?

class Booking < ActiveRecord::Base 
    belongs_to :operator 
end 

내 애플, 픽업 위치에서에 위치를 드롭하고 택시를 예약하고 요금을 확인한 후 데이터베이스의 Booking 모델에 항목을 만듭니다. 새 예약을 생성 할 때 사용자는 이름 및 기타 세부 정보를 입력하는 일반적인 양식 ('user_form')으로 표시됩니다. 이러한 세부 정보는 해당 열의 데이터베이스에있는 예약 테이블에 저장됩니다.

내 app에서 user_form을 통해 이러한 매개 변수를 채우지 않고도 예약 테이블에 세 개의 매개 변수를 저장할 수 있기를 바랍니다. 이러한 매개 변수는 픽업 위치, 드롭 위치 및 요금입니다.

택시를 검색하는 동안 픽업 및 놓기 위치가 채워지는 반면 비즈니스 논리를 기반으로 일부 내부 계산을 한 후에는 요금 매개 변수가 사용자에게 표시됩니다. 이 매개 변수는 민감한 매개 변수이므로 매개 변수으로 전달할 수 없으며 조작하면 비즈니스에 부정적인 영향을 줄 수 있습니다.

내 예약 테이블에는 이러한 매개 변수를 저장할 적절한 열이 있습니다. 또한 my bookings_controller를 사용하면 이러한 매개 변수를 강력한 매개 변수로 저장할 수 있습니다. 운영자를위한 새로운 예약을 생성하는 동안 내 예약 테이블에이 세 매개 변수를 어떻게 저장합니까? 필요한 경우 자세한 내용을 제공 할 수 있습니다.

+0

'왜 선택할 수 없으며 드롭 위치를 매개 변수로 전달 될 수?'나는 이유를 볼 수 없습니다 왜 그들이 할 수 없습니다 당신은'before_save' 또는 비슷한 콜백을 동일한 비즈니스 로직을 사용할 수 있습니다 운임을 매개 변수로 전달하고 싶지 않으면 요금. –

+0

사용자 양식에 숨겨진 필드를 올바른/원하는 값으로 추가하십시오. 사용자가 설정할 수 없으며 컨트롤러에 게시됩니다. – nathanvda

답변

0

attr_accessor를 사용하여 폼에서 관련 매개 변수를 저장 한 다음 before_validation 메소드를 사용하여이 값을보고 요금을 계산합니다. 이렇게하면 운임 계산을하고 데이터베이스에 기록 할 수 있습니다. 예를 들어

#in booking 
attr_accessor :foo 


before_validation :calculate_fare_if_foo 


def calculate_fare_if_foo 
    unless self.foo.blank? 
    #do some calculation based on foo and the other attributes, to set self.fare 
    end 
end 
관련 문제