2014-07-26 5 views
0

je suit dans mon modèle org_person.rbRoR Nested Formulaire de validation

class OrgPerson < ActiveRecord::Base 
     has_and_belongs_to_many :TypRole 
     has_and_belongs_to_many :OrgContact 
     has_one :OrgCredential, dependent: :destroy 
     belongs_to :OrgCompany, foreign_key:"org_company_id" 
     belongs_to :TypPosition, foreign_key:"typ_position_id" 
     validates :first_name, presence: true 
     validates :last_name, presence: true 
     accepts_nested_attributes_for :OrgCredential 
    end 

    class OrgCredential < ActiveRecord::Base 
     belongs_to :OrgPerson, foreign_key:"org_person_id" 
     validates :user_name, presence: true 
     validates :password, length: { minimum: 6 } 
     before_create :create_remember_token 
     has_secure_password 
    end 

et dans mon org_person_controller.rb

def new 
     @person = OrgPerson.new 
    end 

et dans mon new.html.erb

<%= form_for(@person) do |f| %> 
     <%= render 'shared/error_messages' %> 
     <div class="col-md-12 "> 
      <%= f.text_field :first_name, placeholder: "First Name", :class => "form-control" %> 
      <%= f.text_field :last_name, placeholder: "Last Name", :class => "form-control" %> 
      <%= f.fields_for :org_credentials do |oc|%> 
       <%= oc.password_field :password, placeholder: "Password", :class => "form-control" %> 
       <%= oc.password_field :password_confirmation, placeholder: "Password Confirmation", :class => "form-control" %> 
      <% end %> 
     <%= f.submit "Create my account", class: "btn btn-large btn-primary" %> 
     </div> 
    <% end %> 

Dans partagé/error_messages

 <% if @person.errors.any? %> 
     <div id="error_explanation" class="col-md-12"> 
      <div class="alert alert-danger" role="alert"> 
      The form contains <%= pluralize(@person.errors.count, "error") %>. 
      </div> 
      <ul> 
      <% @person.errors.full_messages.each do |msg| %> 
      <li>* <%= msg %></li> 
      <% end %> 
      </ul> 
     </div> 
    <% end %> 

Le problème est que tous les champs doivent être remplis pour passer. Cependant, lorsque je soumets un formulaire vide, je reçois seulement les erreurs "Le prénom ne peut pas être vide" et "Le nom de famille ne peut pas être vide". La validation du mot de passe ne s'affiche pas. Si quelqu'un a des idées, s'il vous plaît commenter. Cela me rend fou.

This is what I mean

Répondre

1

Beaucoup d'erreurs dans votre Models pourrait dirigerai au problème que vous avez.

Votre configuration Models devrait ressembler à ceci

class OrgPerson < ActiveRecord::Base 
    has_and_belongs_to_many :typ_roles 
    has_and_belongs_to_many :org_contacts 
    has_one :org_credential, dependent: :destroy 
    belongs_to :org_company, foreign_key:"org_company_id" 
    belongs_to :typ_position, foreign_key:"typ_position_id" 
    validates :first_name, presence: true 
    validates :last_name, presence: true 
    accepts_nested_attributes_for: org_credential #this is much important 
end 

class OrgCredential < ActiveRecord::Base 
    belongs_to :org_person, foreign_key:"org_person_id" 
    validates :user_name, presence: true 
    validates :password, length: { minimum: 6 } 
    before_create :create_remember_token 
    has_secure_password 
end 

Et il est une relation has_one org_credential avec le org_person, cette ligne dans votre new.html.erb

<%= f.fields_for :org_credentials do |oc|%> 

devrait être

<%= f.fields_for :org_credential do |oc|%> 

Vous devriez jeter un oeil à la se Guides pour configurer correctement le model associations.

+1

Merci! Vous monsieur/Madame êtes un dieu/déesse parmi les hommes. La chose qui m'a fait trébucher était les conventions de nommage que les rails suivent. Cela n'avait pas de sens pour moi auparavant, mais maintenant c'est le cas. –