Salut à tous,
J’ai un model Profile en ARes.
Dans mon application ARes, j’ai un formulaire de base qui me permet de
créer des profiles ainsi:
<% form_for(:profile, :url => profiles_path) do |f| %>
 
   First name
   <%= text_field :profile, :first_name %>
 
 
   Last name
   <%= text_field :profile,  :last_name %>
 
 
   <%= submit_tag "Create" %>
 
<% end %>
et dans mon contrôleur j’ai:
def new
@profile = Profile.new
end
quand je visite /profile/new, j’ai l’erreur suivante:
undefined method `first_name’ for #Profile:0xb698fa24
si je remplace je modifie la fonction new de la manière suivante, ça marche:
def new
@profile = Profile.new(:first_name=>’’,:last_name=>’’)
end
Mais c’est pas très joli.
Est-ce qu’il y a une meilleur façon?
Merci d’avance
             
            
              
              
              
            
            
                
                
              
           
          
            
            
              ok, merci en retard pour toutes ces solutions.
             
            
              
              
              
            
            
                
                
              
           
          
            
            
              Patrick :
quand je visite /profile/new, j’ai l’erreur suivante:
undefined method `first_name’ for #Profile:0xb698fa24
si je remplace je modifie la fonction new de la manière suivante, ça marche:
def new
@profile = Profile.new(:first_name=>‘’,:last_name=>‘’)
end
Mais c’est pas très joli.
Est-ce qu’il y a une meilleur façon?
Une “meilleur façon” n’existe pas.
Ceci dit, voici quelques alternatives :
1/ Définir une méthode de classe dans Profile :
def Profile.new_but_blank
new :first_name=>‘’, :last_name=>‘’
end
Et l’appeler à la place de new.
2/ Créer une instance de Profile qui servira de prototype.
BlankProfile = Profile.new(:first_name => ‘’, :last_name => ‘’).freeze
le freeze n’est peut-être pas suffisant, à voir
et dans le contrôleur :
@profile = BlankProfile.dup
3/ Redéfinir Profile#initialize
def initialize(attributes = {})
@attributes     = {}
@prefix_options = {}
attributes.reverse_merge! :first_name => ‘’, :last_name => ‘’
load(attributes)
end
  -- Jean-François.
–
Ruby ( http://www.rubyfrance.org ) on Rails ( http://www.railsfrance.org
)
             
            
              
              
              
            
            
                
                
              
           
          
            
            
              pour ceux que ça intéresse, avec edge on peut maintenant faire:
GET /profiles/new.xml
def new
@profile = Profile.new
respond_to do |format|
format.html # new.html.erb
format.xml  { render :xml => @profile }
end
end