0

나는 지불 및 방문 모델이 있습니다. 나는 아래의 모델에서 그들을 연관시켰다. 방문은 한 번만 지불 할 수 있습니다.다음 양식으로 ID를 전달하는 데 문제가 있습니다.

사용자가 방문 양식을 작성한 다음 완료되면 결제 양식으로 리디렉션되도록 설정했습니다. 내가하고 싶은 것은 방문 ID가 다음 페이지의 visit_id 양식에있는 hidden_field에 자동으로 전달되도록하는 것입니다.

class Visit < ActiveRecord::Base 
has_one :payment 
end 

class Payment < ActiveRecord::Base 
belongs_to :visit 
end 

상당히 기본적인 것처럼 보입니다. 나는 연관성에 대해 정확하게 생각하지 않을 수 있습니다. 나는 주변을 수색하고 그것을 설명하려고 노력하는 몇 사람을 보았다.하지만 내가 시도한 것은 정확하게 작동하지 않는다. 미리 감사드립니다!

답변

1

한 가지 방법은 단순히

<%= form_for @payment do |f| %> 
    <%= f.hidden_field :visit_id %> 
<% end %> 

그것은 작동합니다 넣어, 당신의 visits/create.html.erb에 그런 다음 VisitsController

def create 
    @visit = Visit.create(visits_params) 
    if [email protected] 
    render :new, error: "Something went wrong" 
    else 
    @payment = @visit.build_payment 
    end 
end 

에, 그것은 것입니다해야 할 일이지만 편안한 관점에서 느낌이 좋지 않습니다 . 그것을 할 수있는 더 좋은 방법으로,이하는 것입니다 당신의 다음과 같은 경로를 생성합니다 config/routes.rb

resources :visits do 
    resources :payments 
end 

:

GET /visits/:visit_id/payments/new 
VisitsController

def create 
    @visit = Visit.create(visit_params) 
    if [email protected] 
    render :new, error: "Something went wrong" 
    else 
    redirect_to new_payment_path(visit_id: @visit.id) 
    end 
end 

에서 그런

그리고 당신의 PaymentsController의를

def new 
    @visit = Visit.find(params[:visit_id]) 
    @payment = @visit.build_payment 
end 
당신의

<%= form_for @payment do |f| %> 
    <%= f.hidden_field :visit_id %> 
<% end %> 

을 넣어하는 것을 잊지 마세요 그리고 거기 당신은 ... 그 어떤 이해가되지 않습니다 알려줘 있습니다.

+0

그것은 꽤 좋은 감각을 만든다. 그것은 @ visit.payment.build를 쫓아 내고있다? 어떤 일이 일어나고 있는지 전혀 알지 못합니다. 오류 : 정의되지 않은 메소드 'build'for nil : NilClass – keith

+0

죄송합니다. has_one 관계이므로 @ visit.build_payment 대신 지금 답변을 업데이트하고 있습니다. 자세한 정보는 문서를 확인하십시오. (http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#module-ActiveRecord::Associations::ClassMethods-label-Auto-generated+Methods) –

+0

빌드가하는 일에 대한 요약을 내게 줄 수 있습니까? – keith

관련 문제