我有付款和访问的模式。我已将它们与下面显示的模型相关联。访问只能有一次付款。
我设置了用户填写访问表单,然后完成后重定向到付款表单。我想要发生的是,访问ID将自动传递到下一页visit_id表单中的hidden_field。
class Visit < ActiveRecord::Base
has_one :payment
end
class Payment < ActiveRecord::Base
belongs_to :visit
end
这似乎相当基本,我似乎无法正确地围绕这些关联。我已经四处搜索,看到有几个人试图解释它,但无论我尝试什么都不能正常工作。提前谢谢!
答案 0 :(得分:1)
在VisitsController
def create
@visit = Visit.create(visits_params)
if !@visit.save
render :new, error: "Something went wrong"
else
@payment = @visit.build_payment
end
end
然后在visits/create.html.erb
中,只需输入
<%= form_for @payment do |f| %>
<%= f.hidden_field :visit_id %>
<% end %>
它应该可以工作但从RESTFUL的角度来看感觉不对。更好的方法是在config/routes.rb
resources :visits do
resources :payments
end
这将产生以下路线:
GET /visits/:visit_id/payments/new
然后在VisitsController
def create
@visit = Visit.create(visit_params)
if !@visit.save
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
在payments/new.html.erb
中忘记放
<%= form_for @payment do |f| %>
<%= f.hidden_field :visit_id %>
<% end %>
你有它...如果这没有任何意义,请告诉我。