한 가지 방법은 단순히
<%= 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 %>
을 넣어하는 것을 잊지 마세요 그리고 거기 당신은 ... 그 어떤 이해가되지 않습니다 알려줘 있습니다.
그것은 꽤 좋은 감각을 만든다. 그것은 @ visit.payment.build를 쫓아 내고있다? 어떤 일이 일어나고 있는지 전혀 알지 못합니다. 오류 : 정의되지 않은 메소드 'build'for nil : NilClass – keith
죄송합니다. has_one 관계이므로 @ visit.build_payment 대신 지금 답변을 업데이트하고 있습니다. 자세한 정보는 문서를 확인하십시오. (http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#module-ActiveRecord::Associations::ClassMethods-label-Auto-generated+Methods) –
빌드가하는 일에 대한 요약을 내게 줄 수 있습니까? – keith