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