【问题标题】:Nested Resource Form For for Stripe FormStripe 表单的嵌套资源表单
【发布时间】:2015-07-09 04:24:09
【问题描述】:

我需要了解如何为嵌套路由设置 form_for,以便我可以在隐藏字段中传递条带标记。对于我已阅读并查看我的 form_for 设置的文档看起来是正确的,但我在 form_for 开头的行上收到此错误:

    undefined method `membership_program_path' for #<#<Class:0x007fd4ef3da588>:0x007fd4f34ccf28>

这是我的路线:

      resources :programs, except: [:show] do
      resources :memberships, only: [:new, :create]
      end

我的会员控制器:

      def new
      @membership = Membership.new
      @program = Program.find(params[:program_id])
      end

这是我的整个 _form.html.erb

     <%= form_for [@membership, @program] do |f| %>
     <%= f.hidden_field :stripe_card_token %>

     <div class="field">
     <%= f.label :email %>
     <%= f.text_field :email %>
     </div>

     <% if @members.stripe_card_token.present? %>
     Credit card has been provided.
     <% else %>
     <div class="field">
     <%= label_tag :card_number, "Credit Card Number" %>
     <%= text_field_tag :card_number, nil, name: nil %>
     </div>
    <div class="field">
    <%= label_tag :card_code, "Security Code on Card (CVV)" %>
    <%= text_field_tag :card_code, nil, name: nil %>
    </div>
    <div class="field">
    <%= label_tag :card_month, "Card Expiration" %>
    <%= select_month nil, {add_month_numbers: true}, {name: nil, id: "card_month"} %>
    <%= select_year nil, {start_year: Date.today.year, end_year: Date.today.year+15}, {name: nil, id: "card_year"} %>
    </div>
   <% end %>
   <div id="stripe_error">
     <noscript>JavaScript is not enabled and is required for this form. First enable it in your web browser settings.</noscript>
   </div>
   <%= f.submit %>
  <% end %>

【问题讨论】:

  • 抛出你的路线(rake routes)并显示为此的特定部分。我怀疑这可能是一对一的关系,以及您的路线文件中的资源与资源。

标签: ruby-on-rails ruby-on-rails-4 form-for nested-routes


【解决方案1】:

错误的原因是因为我的资源设置为“会员”嵌套在“程序”下;然而,调用form_for(@membership, @program) 是告诉form_for 你的程序嵌套在一个成员下。因此,为什么它会寻找不存在的membership_program_path。我颠倒了传递给form_for的参数的顺序,它起作用了。

【讨论】:

  • 听起来很准确,这在查看 rake 路由时会很明显,因为它会显示membership_id/id 说明会员需要是第一个对象。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多