Form_for et ActiveResource

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