嵌套表单不将子对象与父对象关联

时间:2014-01-27 23:53:40

标签: ruby-on-rails nested-forms

我正在尝试构建一个嵌套表单,该表单将创建一个新用户并订阅他们的计划。

当我点击“注册”时,我收到以下错误:

Validation failed: Plan subscriptions user can't be blank

我已经对下面的所有内容进行了两次和三次检查,并且我不确定此时出了什么问题。知道为什么订阅没有与新用户记录相关联吗?

这是我的代码:

User.rb

class User < ActiveRecord::Base
  attr_accessible ..., :plan_subscriptions_attributes

  has_many :plan_subscriptions, dependent: :destroy      

  accepts_nested_attributes_for :plan_subscriptions

PlanSubscriptions.rb

class PlanSubscription < ActiveRecord::Base

  belongs_to :user

Plan_Subscriptions#新

  def new
      @plan = Plan.find(params[:plan_id])
      @user = User.new
      @user.plan_subscriptions.build
  end

Plan_Subscriptions / New.html

<%= form_for @user do |f| %>
    <fieldset>

        <%= f.text_field :first_name, :label => false, :placeholder => 'First Name', :required => false %>
        <%= f.text_field :last_name,  :label => false, :placeholder => 'Last Name', 

          <%= f.fields_for :plan_subscriptions do |builder| %>
            <%= builder.hidden_field :plan_id, :value => @plan.id %>
           <% end %>


        <%= f.submit 'Enroll', :error => false %>
    </fieldset>
<% end %>

1 个答案:

答案 0 :(得分:0)

计划执行时此时不会有id因此我不会使用它。尝试删除该行:

<%= builder.hidden_field :plan_id, :value => @plan.id %>

@ plan.id将为nil,因此它将覆盖自动构建的对象,从而无法通过验证。

然后尝试再次提交表单。如果您希望用户在订阅中设置某些内容,请尝试为计划订阅添加有效的表单元素。