2011-09-27 5 views
1

J'ai essayé récemment d'afficher une liste des champs modifiés avec succès lors de l'envoi d'un formulaire. Le seul problème est que mon formulaire (j'utilise un formulaire simple) ne montre pas les erreurs quand il y en a et que le formulaire ne peut pas être soumis.Problème de formulaire simple avec Rails 3

Voici mon code simplifié:

def update 
    @wizard.assign_attributes(params[:wizard]) 
    # Get changed attributes 

    if @wizard.save 
    # Set the success flash with fields modified 
    redirect_to @wizard 
    else 
    @title = "Edition du profil" 
    render 'edit' 
    end 
end 

La vue:

<%= simple_form_for @wizard do |f| %> 
    <%= f.input :email %> 
    <%= f.input :story %> 

    <%= f.submit "Modifier", :class => "btn success small" %> 
<% end %> 

Le modèle:

class Wizard < ActiveRecord::Base 
    has_secure_password 

    attr_accessible :email, :story, :password, :password_confirmation, :password_digest 

    serialize :ranks, Array 

    validates_presence_of :email, :first_name, :last_name, :gender, :story 
    validates_presence_of :password, :password_confirmation, :unless => Proc.new { |w| w.password_digest.present? } 

    # Other validations here 

    has_one :subject, :foreign_key => "teacher_id" 

    ROLES = %w[teacher] 

    scope :with_role, lambda { |role| {:conditions => "roles_bitmask & #{2**ROLES.index(role.to_s)} > 0"} } 

    # Other functions here 
end 

Quelqu'un at-il une idée?

Merci d'avance!

+0

Vous devriez également afficher votre code d'affichage. –

+0

D'accord, c'est affiché – Cydonia7

+0

Où avez-vous obtenu le 'assign_attributes' (les rails 3.1 sont spécifiques,' update_attributes' est plus communément utilisé dans les versions précédentes)? Est-ce que vous faites une assignation de masse sur l'assistant? –

Répondre

3

Cela a probablement quelque chose à voir avec la façon dont vous avez écrasé AR. Je me souviens d'un plugin qui a eu des problèmes avec assign_attributes. En attendant, vous pouvez essayer:

@wizard.assign_attributes(params[:wizard], :without_protection => true) 

Si cela fonctionne il au moins limiter le problème à l'affectation de masse.

+0

En fait, j'ai résolu le problème enveloppant les fichiers dans le formulaire dans un fieldset_tag. Je ne peux pas comprendre pourquoi. – Cydonia7

0

vous avez peut-être manqué cette partie dans edit/new view.Where @wizard est votre nom de modèle. Ecrivez ce bout de code dans l'étiquette de formulaire.

<% if @wizard.errors.any? %> 
     <div id="error_explanation"> 
      <h2><%= pluralize(@wizard.errors.count, "error") %> prohibited this task from being saved:</h2> 

      <ul> 
      <% @wizard.errors.full_messages.each do |msg| %> 
       <li><%= msg %></li> 
      <% end %> 
      </ul> 
     </div> 
    <% end %> 
+0

En fait, dans mes autres formes, la forme simple le fait automatiquement avec mon propre style CSS et ainsi de suite. Ce que je cherche, c'est la raison pour laquelle ce n'est pas le cas ici. – Cydonia7

+0

poster votre code d'affichage –