2017-02-17 4 views
0

두 모델이 있습니다 : DonorGift. has_manybelongs_to 연관을 만들었습니다. 내 DonorsController 클래스에서 나는이 -이 DonorsController에 정의되어Rails 하위 모델에 추가 필드 저장

데프 새로운 @donor = Donor.new 선물 = @ donor.gifts.build 끝 -

def create  
    @donor = Donor.new(donation_params) 
... etc.... 
end 

private 

    def donation_params 
    params.require(:donor).permit(:first_name, :last_name, :address_1, :address_2, :city, :state, :zip, :email, :phone, gifts_attributes: [:amount, :frequency]) 
    end 

I 지불을 처리 한 후 스트라이프에서 돌아 오는 charge.id을 저장하려고합니다. 이걸로 해보겠습니다. -

@donor.gifts.stripe_charge_id = charge.id ar 선물 - 도와주지 않았다).

@donor.save은 양식 및 허용 목록에있는 선물 필드를 포함하여 모두 정상적으로 작동하며 모두 db에 저장됩니다. 그러나 stripe_charge_id 필드는 비어 있습니다. charge.id 값이 있음을 확인했습니다.

@donor.stripe_customer_id = customer.id이 작동 중입니다.

Gift 모델에 cattr_accessor :stripe_charge_id을 추가했습니다.

나는 set/get 메서드를 정의하려고 시도했지만 아무것도 작동하지 않습니다.

도움을 주시면 감사하겠습니다. 내가 덤프 한 모든 것은 학부모 &의 자식 협회에서 제외되었지만 문제는 없습니다.

미리 감사드립니다.

+0

@ donor.gifts.stripe_charge_id = charge.id. 'gifts'는'has_many' 관계이므로,'gifts'가 콜렉션이기 때문에'gifts.stripe_charge_id'를 지정할 수 없습니다. 모든 선물을 반복하여 'charge.id'를 할당해야합니다. 그것은 하나의 방법입니다. – fanta

답변

0

@fanta가 말한대로, has_many 관계가 있습니다. 따라서 당신은 stripe_charge_id을 그렇게 설정할 수 없습니다. 그리고 네가 그렇게했다하더라도, 부모님을 구한 덕분에 레일은 아이를 구하지 못할 것이다.

이 작업을 수행 할 수 있습니다 :

@donor.gifts.update_all(:stripe_charge_id => charge.id) 
+0

답장을 보내 주셔서 감사합니다. 기부자는 잠재적으로 하나 이상의 선물을 가질 수 있기 때문에 has_many 관계이지만 각 거래마다 기부자가 하나씩 있습니다. 다른 선물 필드는 추가 코드없이 donor save 메소드에 저장되므로 기증자를 저장하기 전에 stripe_charge_id를 추가 할 수 있다고 생각했습니다. 그러나 기증자를 저장 한 후 update_all 함수를 호출하고 그 작업을 수행했습니다. 다시 한번 감사드립니다. – Steve

+0

올바른 것으로 마킹하고 upvoting이 좋을 것입니다. – Fallenhero

+0

안녕하세요 - 투표했지만 점수가 너무 낮아 점수에 반영되지 않았습니다. 죄송합니다. – Steve