2017-05-24 10 views
0

레일 어레이를 순환 시키려고 할 때 배열이 이미 정의 된 경우에도 여전히 nil을 갖습니다.루프가 항상 레일 4에 nil이 존재하지 않습니다.

코드 :

def gen_address 
    current_user.accounts.each do |account| 
    abort(@account.inspect) 
    next if not account.currency_obj.coin? 

    if account.payment_addresses.blank? 
     account.payment_addresses.create(currency: account.currency) 
    else 
     address = account.payment_addresses.last 
     address.gen_address if address.address.blank? 
    end 
    end 
    render nothing: true 
end 

current_user.accounts 세 항목 배열을 갖는다. 중단은 테스트 용입니다.

current_user.accounts가 있습니다

#<ActiveRecord::Associations::CollectionProxy [#<Account id: 14, member_id: 3, currency: nil, balance: 0.0, locked: 0.0, created_at: "2017-05-23 08:50:11", updated_at: "2017-05-23 08:50:16", in: nil, out: nil, default_withdraw_fund_source_id: nil>, #<Account id: 5, member_id: 3, currency: "btc", balance: 0.0, locked: 0.0, created_at: "2017-05-03 08:37:19", updated_at: "2017-05-03 08:37:19", in: nil, out: nil, default_withdraw_fund_source_id: nil>, #<Account id: 6, member_id: 3, currency: "ltc", balance: 0.0, locked: 0.0, created_at: "2017-05-03 08:37:19", updated_at: "2017-05-03 08:37:19", in: nil, out: nil, default_withdraw_fund_source_id: nil>, #<Account id: 13, member_id: 3, currency: "eth", balance: 0.0, locked: 0.0, created_at: "2017-05-23 08:42:29", updated_at: "2017-05-23 08:42:35", in: nil, out: nil, default_withdraw_fund_source_id: nil>]> 

계정이 전무

currency_obj 항상이다 :

module HashCurrencible 
    extend ActiveSupport::Concern 

    included do 
    def currency_obj 
     Currency.find_by_code(attributes[:currency]) 
    end 
    end 
end 

내가 account.currency_obj.coin하지 않을 경우 다음 행에 대해이 오류가

? 제거를 중단 할 때 :

undefined method `coin?' for nil:NilClass 
+0

사용자 및 계정 모델과 오류를 게시 할 수 있습니까? 어디로 날아가는거야? –

+0

물론, – Maximi

+0

이'current_user.accounts [0]'또는'@ account' nil이라는 질문을 업데이트 했습니까? – AlexN

답변

1

currenc_objnil이므로 coin? 메서드에 응답 할 수 없습니다. 이 라인 확인 : 첫 번째 Account 객체에서

#<Account id: 14, member_id: 3, currency: nil, balance: 0.0, locked: 0.0, created_at: "2017-05-23 08:50:11", updated_at: "2017-05-23 08:50:16", in: nil, out: nil, default_withdraw_fund_source_id: nil 

를, 속성 :currency 그래서 방법 currency_obj뿐만 아니라 nil를 반환합니다 nil입니다.

1

변수 계정에는 루프에 대한 범위 만 있습니다. 따라서 루프 밖에서는 아무 것도 없을 것입니다.

+0

당신이 사실이지만,이 문제를 해결하는 방법은? – Maximi

+1

실제로 필요한 기능에 따라 달라 지므로 nil 값을 사용하여 변수를 선언하고 계정을 할당 할 수 있습니다. 모든 계정에서 빈 배열을 만들고 루프 내에 acoount를 넣으려면 – Charles

+0

account.currency_obj.coin은 Currency.find_by_code (속성 [: currency])에 동전을 주입하지만 그렇지 않다면 어떻게 할 것입니까? – Maximi