2014-11-23 3 views
1

두 모델, TeamPlan 있습니다. 팀은 계획과 많은 관계를 맺고 있으며 계획에는 많은 팀이 있고 각 팀마다 하나의 계획이 있습니다. 그것은 다음과 같습니다 : 나는 청구를 되풀이 Stripe을 사용하고, 나는 스트라이프와 동기화 내 응용 프로그램을 유지하기 위해 [webhooks][2]을 사용하고레일 4 - 설정 belongs_to 관계가 작동하지 않습니다

#Plan 
has_many :teams 

#Team 
belongs_to :plan 

. 스트라이프 이벤트를 받으려면 [stripe_event][3]을 사용하고 있습니다. 구독이 생성되면 새로 만든 구독 계획으로 계획을 설정하려고합니다.

events.subscribe 'customer.subscription.created' do |event| 
    team = Team.find_by_stripe_customer_id(event.data.object.customer) 
    create_subscription_for_team(team, event.data.object) 

    # In this methods I want to set my plan 
    set_team_plan(team, event.data.object.plan) 
end 

def set_team_plan(team, plan) 
    team_plan = Plan.find_by_stripe_id(plan.id) 
    team.update_attribute(plan_id: team_plan.id) 
end 

은 내가 볼 수있는 오류를 얻을하지 않습니다,하지만 계획은 업데이 트하지 않는 것 : 나는 스트라이프 이벤트 customer.subscription.created을 얻을 때 나는 다음을 수행합니다. 나는 또한 시도했다 :

team.plan = team_plan 
team.save! 

그러나 이것은 나에게 같은 결과를 준다. 로그했을 때 나는 team_plan이 정확한 계획이며 nil이 아님을 확인했습니다.

내가 뭘 잘못하고 있는지에 대한 아이디어가 있습니까? 역 관계를 추가

답변

1

시도 :

#Plan 
has_many :teams, inverse_of: :plan 

#Team 
belongs_to :plan, inverse_of: teams 

역의 관계는 하위 객체를 저장할 때 save 작동을 보장합니다.

저장 전후에 각 항목의 ID를보고 시도해보십시오

당신이 레일 로거, 또는 pry 또는 디버거 마음에 드시면
p "team_plan.id:#{team_plan.id}, team.plan.id: #{team.plan.id}" 
team.plan = team_plan 
p "team_plan.id:#{team_plan.id}, team.plan.id:#{team.plan.id}" 
team.save! 
p "team_plan.id:#{team_plan.id}, team.plan.id:#{team.plan.id}" 

는, print 문 대신들을 사용합니다. :)

+0

감사합니다. 예, 저장하려고했습니다. ('! '은 그가 여기있는 타입이 아니며, 이제는 내 질문을 업데이트했다). 'inverse_of'를 설정했을 때'ActionView :: Template :: Error (계획의 팀 (계획에서 팀)에 대한 역 연관성을 찾을 수 없음) : – Anders

+0

@Anders Typo - inverse_of를 사용하십시오 : teams 복수형) – joelparkerhenderson

+0

사실 그것은 다른 것과 관련이 있습니다. 내 '팀'모델에는 기본 '계획'을 설정하는 'before_create'가있었습니다. 이 작업은 내 계획이 어떤 이유로 생성 될 때도 호출되었습니다. – Anders

관련 문제