【问题标题】:Having trouble trying to pass an id into the next form尝试将 id 传递到下一个表单时遇到问题
【发布时间】:2015-01-11 09:52:23
【问题描述】:

我有一个付款和访问模型。我已将它们关联到如下所示的模型中。一次访问只能支付一次。

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

class Visit < ActiveRecord::Base
has_one :payment
end

class Payment < ActiveRecord::Base
belongs_to :visit
end

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

【问题讨论】:

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


    【解决方案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 %>
    

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

    【讨论】:

    • 这很有道理,但它正在踢出@visit.payment.build?完全不确定那里发生了什么错误是:未定义的方法`build' for nil:NilClass
    • 抱歉,这是一个 has_one 关系,所以它是 @visit.build_payment,我现在正在更新我的答案。查看文档了解更多信息 (api.rubyonrails.org/classes/ActiveRecord/Associations/…)
    • 您能否给我简要介绍一下构建正在做什么?
    • 它只是创建一个关系类的新实例。当使用 has_one/belongs_to build_'other' 将构建一个新的类 'other' 对象并设置调用者的 id。当使用 has_many/belongs_to 'other'.build 将在集合上做同样的事情。
    • 啊,有道理。明白了。你有时间偶然问另一个问题吗?与上一个无关。我现在已经开始工作了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-02
    • 1970-01-01
    • 1970-01-01
    • 2020-03-10
    • 1970-01-01
    • 2019-09-02
    相关资源
    最近更新 更多