2010-01-31 3 views
0

레일에 '비용'모델이 있습니다. 다음과 같은 뭔가 :모델 생성자를 레일스에서 ​​비울 수 있습니까?

class Cost < ActiveRecord::Base 

    belongs_to :cost_type 
    has_many :cost_distributions 

    attr_accessor :epp 

    def initialize() 
    end 

그러나, 나는 빈 생성자 새로운 인스턴스를 만들려고 내 테스트에

cost = Cost.new 

오류가 발생합니다 : 인수의 잘못된 번호 (1 0) . 빈 생성자를 무시하는 이유는 무엇입니까?

+0

거기에 추가 할 특별한 것이없는 한 생성자가 필요하지 않습니다. 해시를 Cost.new로 전달하고 있습니까? 그렇다면 생성자에서 처리해야합니다. –

답변

2

본질적으로 동작을 재정의하기 때문에 ActiveRecord가 자체 초기화를 수행하도록 허용해야합니다. 그냥 initialize이 변경 :

Cost.new 

이렇게 당신의 빈 initialize 방법 :

def initialize() 
super 
end 

를하지만, 전혀 생성자를 제공하지 않는 경우, 레일은 매개 변수없이 모델을 만들 수 있습니다 다른 것? 그렇지 않은 경우에도 필요하지 않습니다.

+0

오류를 제거하지 않습니다. – Daniel

+0

'initialize' 함수가 비어 있고 'super'만 있다면, 제대로 작동해야합니다. 솔루션을 확인하기 위해 게시하기 전에 로컬에서 테스트했는데 효과가있었습니다. 오류를 일으키는 코드 (게시하지 않은 부분)에 다른 것이 있다고 확신합니다. –

+0

비용 클래스에서 모든 메서드를 제거했으며 여전히 매개 변수로 메서드를 초기화 할 것으로 예상됩니다. – Daniel

1
def initialize(*args) 
    super 
end 

비밀 소스입니다.

0

일반적으로 ActiveRecord의 initialize 메서드 isn't a very good idea을 재정의합니다.

initialize()에 "nothing"이있는 경우 필요하지 않습니다. 그냥 제거하십시오.

class Cost < ActiveRecord::Base 

    belongs_to :cost_type 
    has_many :cost_distributions 

    attr_accessor :epp 

end 

당신은 여전히 ​​Cost.new 호출 할 수 있습니다 (오른쪽 당신이 그것을 오버라이드 (override)하지 않는 경우, 방법은 ActiveRecord 자체에 의해 제공됩니다 초기화).

관련 문제