2014-10-02 4 views
-1

나는 주파수를 가지고 있으며 자신의 생성에 대한 여러 레코드를 만들어야하는 reocure의 모델을 가지고 있습니다. 정수 주파수 (1,7,30)를 (일, 주, 개월)의 함수로 변환하려고합니다. 따라서이 값을 새 레코드에 추가 할 수 있습니다. 날짜 기능의 레일 해시

나는 date+i.months()처럼 사용하기 위해, 날짜 함수의 해시를 사용하여 그 일을 시도 :

date_hash={1=>days(), 7=>weeks(), 30=>months()} 

하지만 오류를 받고 있어요. 그것은 루프의 내부에 사용되어야한다

: 당신의 도움에 대한

undefined method `days' for # <MyController:0x111111> 

감사 :

some_number.times do |i| 
    Record.create({...., :date => start_date+i.(date_hash[frequency]),....}) 
end 

는이 오류를 받고 있어요.

+0

확실하지 않습니다. 코드가 이상하게 보입니다. 실제 코드를 게시하거나 수행하려고 시도하는 것이 더 명확 할 수 있습니까? – Surya

+0

당신이하려는 일에 대해 설명해 주시겠습니까? 특정 날짜에 1 일, 7 주 및 30 개월을 추가 하시겠습니까? – Stefan

+0

가 추가되었습니다. –

답변

1

여기에 Ruby가 많지 않습니다. Ruby는 여러분이 기대하는 것처럼 최상급 함수를 제공하지 않으며 (date()은 로컬 범위에서 사용 가능한 date이라는 함수의 호출 결과에 해당 키 값을 할당합니다) 변수 메소드를 호출 할 수 없습니다 그런 이름이야. Ruby에서 객체 (수신기)에 대한 메소드 호출은 선택적 인수와 함께 수신기로 전송되는 메시지입니다. 이 같은 부를 것이다 전형적인 방법은 원하는 방법 이름으로 Object#send을 사용하는 것입니다 :

methods = {1 => :days, 7 => :weeks, 30 => :months} 
x.send(methods[1]) # Calls x#days 

그러나, 코드의 의도가 다소 불분명하고, 가능성이 일을 더 나은 - 인수 분해 방법이 무엇인지 네가 원해.

+0

완벽하게 일했습니다! –

+0

어쨌든 실제 논리에 대한 정보를 추가했습니다. 더 나은 방법이 있는지 확인할 수 있습니다. –