Plusieurs références à un même Model

Bonjour,

J’ai créé le Model suivant :
Code :

class CreateVilles < ActiveRecord::Migration
def self.up
create_table :villes do |t|
t.string :nom
t.references :Etat

  t.timestamps
end

end

class CreateLignes < ActiveRecord::Migration
def self.up
create_table :lignes do |t|
t.references :depart
t.references :arrivee
t.integer :distance
t.datetime :heure_depart
t.integer :taxes_ligne

  t.timestamps
end

end

depart et arrivee sont des villes.
j’ai donc mis ceci dans le contrôleur :
Code :

class Ville < ActiveRecord::Base
has_many :Lignes
belongs_to :Etat
end

class Ligne < ActiveRecord::Base
belongs_to :depart, :class_name => ‘Ville’, :foreign_key =>
‘depart_id’
belongs_to :arrivee, :class_name => ‘Ville’, :foreign_key =>
‘arrivee_id’
has_many :Vols
end

lors de la création, tout “semble” bien se passer mais lorsque j’essaie
d’afficher (donc le index.erb.html ou le show.erb.html), j’ai l’erreur
suivante :
Code :

ActiveRecord::RecordNotFound in Lignes#show

Showing lignes/show.html.erb where line #4 raised:

Couldn’t find Ligne without an ID

Extracted source (around line #4):

1:


2: Depart:
3: <%=h Ligne.find(@ligne.depart_id).nom %>
4:


5:
6:


7: Arrivee:

RAILS_ROOT: C:/Documents and Settings/Sylvain D./Mes
documents/NetBeansProjects/SeventyPlanesCalculator
Application Trace

C:/Program Files/NetBeans
6.1/ruby1/jruby-1.0.3/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record/base.rb:1248:in
find_from_ids' C:/Program Files/NetBeans 6.1/ruby1/jruby-1.0.3/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record/base.rb:504:infind’
app/views/lignes/show.html.erb:4:in
_run_erb_47app47views47lignes47show46html46erb' app/controllers/lignes_controller.rb:20:inshow’

Request

Parameters:

{“id”=>“2”}

Sachant que le code <%=h Ligne.find(@ligne.depart_id).nom %> marche bien
dans les cas ou j’ai une relation avec une seul références. Exemple :
Code :

<%=h Etat.find(ville.etat_id).nom %>

D’ailleurs, je trouve pas ça très propre dons si il ya une manière
“classe” de le faire… (j’ai essayé ville.Etat.nom mais ça marche pas)

Merci d’avance

Le 13/01/08, Sylvain D. a écrit :

class Ville < ActiveRecord::Base
has_many :Lignes
belongs_to :Etat
end

has_many :lignes
belongs_to :etat

class Ligne < ActiveRecord::Base
belongs_to :depart, :class_name => ‘Ville’, :foreign_key =>
‘depart_id’
belongs_to :arrivee, :class_name => ‘Ville’, :foreign_key =>
‘arrivee_id’
has_many :Vols
end

has_many :vols

[…]

Extracted source (around line #4):

1:


2: Depart:
3: <%=h Ligne.find(@ligne.depart_id).nom %>

@ligne.depart.nom

[…]

Utilise des noms d’associations et des noms de colonnes
en minuscules, si tu as la possibilité de suivre les conventions
de Rails, pourquoi t’embêter à s’en écarter.

– Jean-François.


Ruby ( http://www.rubyfrance.org ) on Rails ( http://www.railsfrance.org
)

Jean-François Trân wrote:

Utilise des noms d’associations et des noms de colonnes
en minuscules, si tu as la possibilit� de suivre les conventions
de Rails, pourquoi t’emb�ter � s’en �carter.

– Jean-Fran�ois.


Ruby ( http://www.rubyfrance.org ) on Rails ( http://www.railsfrance.org
)

Bonjour,
merci pour le truc (j’avais fait exprès de mettre des majuscules en
croyant bien faire…)

Maintenant que j’ai fait ça, j’ai plus besoin d’utiliser mon find dégeu
pour récupérer le nom :slight_smile:

par contre, je n’arrive toujours pas à avoir le nom de la ville de
départ et d’arrivée…

j’utilise deux collection_select (quasi identitiques, seul depart
remplace arrivee) pour choisir les ids, sachant que @ville est récupéré
de cette manière, via un partial et que cela “marche” vu que je vois la
liste des villes :
def update_arrivee_field
etat_id = params[‘etat_id’]
@ville = Ville.find(:all, :conditions=>[‘etat_id = ?’, etat_id.to_i
], :order => “nom asc”)
render :partial => “update_arrivee_field”
end

le collection select :
<%= collection_select(:avion, :arrivee_id,@ville, :id, :nom) %>

est-ce que je fais une erreur quelquepart ?
je sais qu’on peut mettre une commande pour voir ce qu’on envoie mais je
la retrouve pas…

Sylvain D. wrote:

le collection select :
<%= collection_select(:avion, :arrivee_id,@ville, :id, :nom) %>

est-ce que je fais une erreur quelquepart ?
je sais qu’on peut mettre une commande pour voir ce qu’on envoie mais je
la retrouve pas…

bon ben j’ai trouvé, j’ai mis :avion au lieu de ligne…
bête erreur :wink: