2010-04-30 8 views
1

Ruby: 1.9.2
Rails: 3.0beta3Aide avec les associations dans Rails 3

J'ai besoin d'aide avec les associations dans Rails 3.

je les modèles suivants (voir extraits ci-dessous):

école, État, SchoolLocale

Le tableau des écoles a les domaines suivants:

id

, nom, state_id, school_locale_id

Le tableau des états a les champs suivants:

id

, abbr, nom

Le tableau school_locales les éléments suivants sont champs:

id, code, nom

Malheureusement, ma source de données n'avait pas d'ID pour school_locales. Ainsi, les données stockées dans le champ "school_locale_id" dans la table schools correspondent réellement au champ "code" de la table school_locales.

school.rb:

class School < ActiveRecord::Base 
    belongs_to :state 
    belongs_to :school_locale 
end 

state.rb:

class State < ActiveRecord::Base 
    has_many :schools 
end 

school_locale.rb:

class SchoolLocale < ActiveRecord::Base 
    has_many :schools 
end 

Je voudrais une requête pour une école donnée, disons que l'école .find (1), qui produirait le nom de l'école, le nom de l'état et le nom de l'école-locale. Je suppose que je dois ajouter un index au champ 'code' dans la table school_locales et le spécifier en quelque sorte comme une clé étrangère, mais je ne suis pas certain. Toute aide serait appréciée.

Répondre

0

Cela ne répond pas exactement à votre question, mais je pense que c'est un élément d'information utile. En ce qui concerne votre utilisation d'un tableau states, permettez-moi de vous référer au Surrogate Vs. Natural/Business Keys.

@Ted dit ici:

Rappelez-vous qu'il n'y a rien de particulier une clé primaire, sauf qu'il est étiqueté comme tel. Ce n'est rien de plus qu'une contrainte NOT NULL UNIQUE, et une table peut en avoir plus d'une.

Si vous utilisez une clé de substitution, vous souhaitez toujours qu'une clé métier garantisse l'unicité conformément aux règles métier.

Il est inutile d'avoir une state_id clé étrangère qui lie à une table states. Chaque état a déjà un identifiant unique; son abréviation de 2 lettres.Cet identifiant unique est tout aussi bon qu'un identifiant numérique. Et parce que ces données ne changent pas souvent, il n'y a aucun mal à les faire définir statiquement dans votre application quelque part.

+0

Une fois que je reçois la solution, je vais travailler comment ne pas avoir besoin d'un identifiant sur la table des états. – GreenPlastik

0

Je ne suis pas sûr, mais vous pouvez essayer d'utiliser ceci:

class SchoolLocale < ActiveRecord::Base 
    has_many :schools, :primary_key => :code 
end 

Permettez-moi savoir si cela fonctionne:]

+0

Malheureusement, c'est un non. – GreenPlastik

+0

Qu'obtenez-vous en utilisant ce code et 'School.find (1) .school_locale'? –

Questions connexes