2009-12-23 5 views
1

J'ai créé une nouvelle migration:Rails: une nouvelle migration, mais nul dans le contrôleur

class AddSignatureToUser < ActiveRecord::Migration 
    def self.up 
    add_column :users, :signature, :text 
    end 

    def self.down 
    remove_column :users, :signature 
    end 
end 

Maintenant, mon usertable a une nouvelle colonne appelée signature. Sur ma page d'édition j'ai écrit:

<h1>Editing user</h1> 
<% form_for(@user) do |f| %> 



    <%= f.error_messages %> 
    <div class="form-wrapper"> 
    <p> 
     <label for="email">Email</label> 
     <%= f.text_field :email %> 
    </p> 
    <p> 
     <label for="user_signature">Signature</label> 
     <%= f.text_area(:signature, :value => @user.signature) %> 
    </p> 
    <div class="form-submit"> 
     <%= f.submit 'Update', :class => "form-submit-button" %> 
    </div> 

    </div> 


<% end %> 

Mais cela ne fonctionnera pas. Dans mon contrôleur, je reçois toujours zéro comme valeur pour la signature. Des idées pourquoi?

def update 
    @user = User.find(params[:id]) 

    respond_to do |format| 
     if @user.update_attributes(params[:user]) 
     puts @user.signature #always nil 
     flash[:notice] = 'User was successfully updated.' 
     format.html { redirect_to(@user) } 
     format.xml { head :ok } 
     else 
     format.html { render :action => "edit" } 
     format.xml { render :xml => @user.errors, :status => :unprocessable_entity } 
     end 
    end 
    end 

Répondre

1

D'accord, j'ai trouvé mon erreur! Dans mon modèle d'utilisateur, j'avais

attr_accessible :login, :email, :password, :password_confirmation 

J'ai ajouté: signature et maintenant ça fonctionne!

attr_accessible :login, :email, :password, :password_confirmation, :signature 
0

Juste pour être sûr, vous avez exécuté rake db:migrate pour exécuter la migration, oui?

+0

oui, j'ai couru rake db: migrer et la colonne existe dans ma base de données (sélectionnez la signature des utilisateurs;) – Newbie

1

Vérifiez pour vous assurer que vous avez exécuté la migration pour l'environnement approprié (développement, production)

RAILS_ENV=development rake db:migrate 

Ceci est la valeur par défaut, mais vous pouvez établirons l'environnement quelque part. Je pense que vous auriez une méthode non trouvée erreur si vous aviez pas, mais assurez-vous, j'ai été chaud par cela avant.

Ensuite, si vous utilisez la bâtarde/webrick, essayez d'utiliser le débogueur, en démarrant le serveur avec:

./script/server --debugger --environment=development 

Et puis dans votre contrôleur:

respond_to do |format| 
     debugger 
     if @user.update_attributes(params[:user]) 
     puts @user.signature #always nil 
    ... 

Et vérifier ce params est ici, en particulier params [: user] [: signature], assurez-vous qu'il est correctement passé.

Enfin, dans la vue, tout ce que vous avez besoin est:

<%= f.label :signature %> 
    <%= f.text_area :signature %> 

La valeur sera déjà la valeur actuelle puisque vous appelez le formulaire @user dans le form_for. Le réglage explicite de: valeur peut être quelque part interférait

+0

Eh bien, je l'migré mirgration à ma base de données et la colonne existe déjà. J'ai essayé d'écrire <% = f.label: signature%> <% = f.text_area: signature%> sans succès.Mais je pense que peu importe temps j'écris <% = f.text_area (: signature,: valeur => @ user.signature)%> ou < % = f.label: signature%> <% = f.text_area: signature%> à droite? Dois-je écrire quelque chose dans mon modèle d'utilisateur? Je ne pense pas, mais on ne sait jamais ... Je suis nouveau sur les rails, désolé. – Newbie

+0

Utilisez-vous une version plus récente de Rails (2.3.x)? Vous n'avez pas besoin d'écrire quoi que ce soit dans votre modèle utilisateur, activerecord configure automatiquement les méthodes pour vous. –

+0

Oui, j'utilise V2.3.2 et Netbeans comme IDE. – Newbie

1

Deux questions- rapide

  1. Pourquoi sommes-nous à la recherche edit.html.erb et mise à jour ici? Avez-vous déjà créé cet enregistrement avec new.html.erb et créé?

  2. Pourquoi avez-vous <%= f.text_area(:signature, :value => @user.signature) %> au lieu de simplement <%= f.text_area :signature %>

+0

1. Oui, mon utilisateur est créé dans un formulaire d'inscription (users/new.html.erb) 2. Maintenant, j'utilise <% = f.text_area: signature%> mais cela ne fonctionnera pas après tout. – Newbie

+0

Qu'est-ce que vous obtenez si votre essai place les paramètres [: user] [: signature] dans votre contrôleur? – MattMcKnight

+0

Lorsque je place des paramètres [: user] [: signature] dans ma fonction de mise à jour, j'obtiens la bonne valeur. Je suis nouveau à Rails, alors comment continuer? Quelle est la différence entre met params [: user] [: signature] et met @ user.signature? – Newbie

Questions connexes