Forum: Rails France Couldn't find Group without an ID

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
ben *. (Guest)
on 2009-03-10 16:36
Bonjour,

 J'ai un petit problème avec l'update dans mon contrôleur
contacts_controller.rb".
Pour resituer le contexte, je dispose de deux modèles "contact" et
"group" auxquels sont associés deux contrôleurs "contacts_controller.rb"
et "groups_controller.rb". Un groupe peut avoir plusieurs contacts, un
contact est associé à un seul groupe (cf tutoriel =>
http://www.buzzdenoel.fr/tutoriel-ruby-on-rails.html).

Quand je souhaite mettre à jour le contact 28 du groupe 1, j'obtiens
toujours un message d'erreur :

" ActiveRecord::RecordNotFound in ContactsController#update

Couldn't find Group without an ID"

http://localhost:3000/groups/1/contacts/28/edit => Vue edit.erb.html
contenant :


<h3>Modifier le contact "<%=h @contact.name %>"du groupe "<%=h
@group.name %>"</h3>
<p>&nbsp;</p>
<% form_for(@contact) do |f| %>
<%  @contact.group_id = @group.id %>

<%= hidden_field :group_id , :group_id, :value => @group.id %>
<p>Nom : <%= f.text_field :name, :size=>'20' %></p>
<p>Telephone : <%= f.text_field :phone_number, :size=>'10' %></p>
<p>Adresse : <%= f.text_field :address, :size=>'50' %></p>
<%= f.submit 'Mettre à jour' %>
<% end %></p>
<br />
<%= link_to 'Retour',group_path(@group.id)+'/contacts'
%>&nbsp;&nbsp;|&nbsp;&nbsp;<%= link_to
'Consulter',group_path(@group.id)+contact_path(@contact)
%>&nbsp;&nbsp;|&nbsp;&nbsp;<%= link_to
'Supprimer',group_path(@group.id)+contact_path(@contact),:method =>
:delete,:confirm => 'Etesvous sur de vouloir supprimer cet élément ?' %>






Pourtant, dans request parameters, j'ai bien :

{"_method"=>"put",
 "authenticity_token"=>"5535d229b55227e382c76c6a144fcf42c341a868",
 "group_id"=>{"group_id"=>"1"},
 "contact"=>{"name"=>"marcel",
 "phone_number"=>"0577554433",
 "address"=>"rue des rien 34000 Montpellier"},
 "commit"=>"Mettre à jour",
 "id"=>"28"}





Voici le contenu de mon controleur "contacts_controller.rb" :

class ContactsController < ApplicationController
  before_filter :find_group

  def index
    @contacts = Contact.find :all, :order => "name ASC"
  end

  def show
    @contact = Contact.find params[:id]
  end

  def new
    @contact = Contact.new
  end

  def create
    @contact = Contact.new params[:contact]
    @contact.group = @group
    if @contact.save
      flash[:notice] = "Le contact a été créé avec succès"

      redirect_to groups_contacts_path(@group)
    else
      render :action => "new"
    end
  end

  def edit
    #id designe l'identifiant contact
    @contact = Contact.find params[:id]
    mon_fichier = File.open("test.txt", "w")
    mon_fichier.write @contact.name
    mon_fichier.close
  end

  def update

    #je recupere le contact qui a l id = ID
    @contact = Contact.find params[:id]
mon_fichier2 = File.open("testBis.txt", "w")
      mon_fichier2.write @contact.name
      mon_fichier2.close
    #mettre a jour tous les attributs
    if @contact.update_attributes params[:contact]

      flash[:notice] = "Le contact a été modifié avec succès"

      redirect_to 'groups_path'
    else
      render :action => "edit"
    end
  end

  def destroy
    @contact = Contact.find params[:id]
    @contact.destroy

    #bonne adresse /groups/id/contacts (menu
    redirect_to group_path(@contact.group_id)+'/contacts'
  end

  private

  def find_group
    @group = Group.find params[:group_id]
  end
end

J'ai le même problème avec l'insertion ? Je vois pas vraiment d'ou vient
le problème... Je débute donc...
Cyril M. (Guest)
on 2009-03-10 16:47
(Received via mailing list)
Babiben A. wrote:
> Quand je souhaite mettre à jour le contact 28 du groupe 1, j'obtiens
> <h3>Modifier le contact "<%=h @contact.name %>"du groupe "<%=h
> <% end %></p>
>
>  "commit"=>"Mettre à jour",
>
>   end
>     end
>   end
>
>   def edit
>     #id designe l'identifiant contact
>     @contact = Contact.find params[:id]
>
Contact.find(28) exist vraiment ?

--
Cyril M.
http://blog.shingara.fr
Jean-François Trân (Guest)
on 2009-03-10 17:01
(Received via mailing list)
Le 10 mars 2009 15:36, Babiben a écrit :

Dans ton formulaire, ça c'est pas bon :

> <%= hidden_field :group_id , :group_id, :value => @group.id %>

Pour s'en convaincre, tu peux comparer le code HTML généré
avec celui généré par :

> <p>Nom : <%= f.text_field :name, :size=>'20' %></p>

> Pourtant, dans request parameters, j'ai bien :
>
> {"_method"=>"put",
>  "authenticity_token"=>"5535d229b55227e382c76c6a144fcf42c341a868",
>  "group_id"=>{"group_id"=>"1"},
>  "contact"=>{"name"=>"marcel",
>  "phone_number"=>"0577554433",
>  "address"=>"rue des rien 34000 Montpellier"},
>  "commit"=>"Mettre à jour",
>  "id"=>"28"}

Ouais mais c'est pas bon, tu vois bien qu'il y a un problème avec :

"group_id"=>{"group_id"=>"1"},

Ce que tu veux c'est :

  "contact"=>{"name"=>"marcel",
  "phone_number"=>"0577554433",
 "group_id"=>"1",
 ...

i.e. params[:contact][:group_id] et non
params[:group_id][:group_id]

   -- Jean-François.

--
http://twitter.com/underflow_
ben *. (Guest)
on 2009-03-10 17:16
"group_id"=>{"group_id"=>"1"},

Ce que tu veux c'est :

  "contact"=>{"name"=>"marcel",
  "phone_number"=>"0577554433",
 "group_id"=>"1",


En fait, j'ai besoin de id (l'identifiant de mon contact) mais aussi de
group_id (le groupe auquel appartient le contact).

Ce que je veux, c'est

"contact"=>{"group_id" => "1",
name => "marcel"
...
"id"=>"28")
guillaume belleguic (Guest)
on 2009-03-10 17:37
(Received via mailing list)
bonjour

<%= f.hidden_field :group_id %>

sinon si tu utilise les nested resources tu devrais une route du style
groups/1/users/new du coups tu as toujours params[:group_id]

2009/3/10 Babiben A. <removed_email_address@domain.invalid>
Jean-François Trân (Guest)
on 2009-03-10 17:47
(Received via mailing list)
Le 10 mars 2009 16:16, Babiben a écrit :
> En fait, j'ai besoin de id (l'identifiant de mon contact) mais
> aussi de group_id (le groupe auquel appartient le contact).
>
> Ce que je veux, c'est
>
> "contact"=>{"group_id" => "1",
> name => "marcel"
> ...
> "id"=>"28")

Eh oh, le newbie, tu me cherches ou quoi là ?

J'ai mis des points de suspension, c'est pour des prunes ?

   -- Jean-François.

--
http://twitter.com/underflow_
ben *. (Guest)
on 2009-03-10 18:05
> Eh oh, le newbie, tu me cherches ou quoi l� ?
>
> J'ai mis des points de suspension, c'est pour des prunes ?


Non mais t'énerves pas. Je suis juste un peu tête en l'air... J'ai pas
fait attention.

En tout cas, le newbie, il ne trouve pas la solution. Avec le système de
champ caché, j'obtiens bien mon :

 "contact"=>{"group_id"=>"1",
 "name"=>"oooo",
 "phone_number"=>"0612453643",
 "address"=>"rue des newbie as me"},
 "commit"=>"Inserer"}

Le problème, c'est au niveau du traitement de ces données :

En théorie, le contrôleur appelle la méthode "create" ? :
JE récupère les infos et crée un nouveau contact et si c'est ok, je
l'intègre à ma base de données? Je suis redirigé vers la page listant
les groupes...
Sinon, je fais appel à la méthode new => Contact.new ?

def create
    @contact = Contact.new params[:contact]

    if @contact.save
      flash[:notice] = "Le contact a été créé avec succès"

      redirect_to groups_path
    else
      render :action => "new"
    end
  end
guillaume belleguic (Guest)
on 2009-03-10 19:26
(Received via mailing list)
je sais j'insiste mais regarde les nested ressource ...<% form_for
[@group,
@user] do |f| -%>
...
<% end -%>
def create
@contact = @group.contacts.new(params[:contact])
end

grace au before_filter tout vas bien tu doit avoir un group
ah et pense au parenthèse dans les méthodes comme find et new (c'est un
conseil a toi de voir...)

2009/3/10 Babiben A. <removed_email_address@domain.invalid>
guillaume belleguic (Guest)
on 2009-03-10 19:28
(Received via mailing list)
petite note en plus : regarde l'episode 139 de ryan bates

2009/3/10 guillaume belleguic <removed_email_address@domain.invalid>
Thomas (Guest)
on 2009-03-11 10:42
(Received via mailing list)
guillaume belleguic a écrit :
> petite note en plus : regarde l'episode 139 de ryan bates

Ou ce tutoriel:
http://adam.blog.heroku.com/past/2007/12/20/nested...

Prérequis: comprendre les REST routes simples.
ben *. (Guest)
on 2009-03-11 10:46
guillaume belleguic wrote:
> je sais j'insiste mais regarde les nested ressource ...<% form_for
> [@group,
> @user] do |f| -%>
> ...
> <% end -%>
> def create
> @contact = @group.contacts.new(params[:contact])
> end
>
> grace au before_filter tout vas bien tu doit avoir un group
> ah et pense au parenthèse dans les méthodes comme find et new (c'est un
> conseil a toi de voir...)
>
> 2009/3/10 Babiben A. <removed_email_address@domain.invalid>

Ok merci beaucoup ça fonctionne ;)
This topic is locked and can not be replied to.