2014-01-27 2 views
1

Я пытаюсь создать вложенную форму, которая создаст нового пользователя и подпишет его в план.Вложенная форма, не связанная дочерним объектом с родителем

Когда я нажимаю «Записаться» Я получаю следующее сообщение об ошибке:

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

ответ

0

У плана не будет id на этом этапе выполнения, поэтому я бы не использовал его. Попробуйте удалить строку:

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

@ plan.id будет nil, поэтому он будет перезаписывать автоматически построенный объект и таким образом провалить проверку.

Затем попытайтесь отправить форму еще раз. Попробуйте добавить действительный элемент формы для подписки на план, если вы хотите, чтобы пользователь установил что-то в подписке.

+0

Извините, что не нужно было скрывать эту линию. Я могу подтвердить, что '@ plan' действителен. Он устанавливается в контроллере на основе параметра url. Я могу подтвердить, что '@ plan.id' получает значение« 2 »(действительный идентификатор). Так что, похоже, это не так. Ошибка заключается в жалобе на пустой идентификатор пользователя. – pejmanjohn

Смежные вопросы