无法尝试将ID传递到下一个表单

时间:2014-11-14 03:57:24

标签: ruby-on-rails ruby-on-rails-4 model-view-controller associations

我有付款和访问的模式。我已将它们与下面显示的模型相关联。访问只能有一次付款。

我设置了用户填写访问表单,然后完成后重定向到付款表单。我想要发生的是,访问ID将自动传递到下一页visit_id表单中的hidden_​​field。

class Visit < ActiveRecord::Base
has_one :payment
end

class Payment < ActiveRecord::Base
belongs_to :visit
end

这似乎相当基本,我似乎无法正确地围绕这些关联。我已经四处搜索,看到有几个人试图解释它,但无论我尝试什么都不能正常工作。提前谢谢!

1 个答案:

答案 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 %>

你有它...如果这没有任何意义,请告诉我。