2010-07-05 2 views
0

Je veux accéder à un schéma de base de données existante de Rails. J'ai une table NAGIOS_OBJECTS avec une clé primaire OBJECT_ID et une table NAGIOS_HOST_CHECKS qui fait référence à NAGIOS_OBJECTS avec une colonne HOST_OBJECT_ID. Je ainsi défini les relations comme suit:Rails Problème avec des associations en utilisant les options de PRIMARY_KEY + foreign_key

class NagiosObject < ActiveRecord::Base 
    has_one :nagios_host_check, :foreign_key => :host_object_id, :primary_key => :object_id 
end 

class NagiosHostCheck < ActiveRecord::Base 
    belongs_to :nagios_object, :foreign_key => :host_object_id, :primary_key => :object_id 
end 

Cependant, lors de l'appel a_nagios_object.nagios_host_check ou a_nagios_host_check.nagios_object, je reçois toujours nul.

Toute idée de ce qui ne va pas avec mon code?

Répondre

2

foreign_key et primary_key doivent être des chaînes, et non pas des symboles

ex:

class NagiosObject < ActiveRecord::Base 
    has_one :nagios_host_check, :foreign_key => 'host_object_id', :primary_key => 'object_id' 
end 

http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#M001317

+0

Merci. Cela a résolu! Cependant, lors de la création d'un objet à l'aide nagios_host_check NagiosHostCheck.create (: nagios_object => NagiosObject.create()), il ne récupère pas le droit id. Au lieu de cela, je dois faire NagiosHostCheck.create (: host_object_id => NagiosObject.create() id.) – elasticsecurity

+0

semble qu'il y a des effets secondaires étranges puisque ma colonne est appelée object_id et donc potentiellement en conflit avec une méthode Ruby natif – elasticsecurity

+0

@elasticsecurity Je pense vous avez raison, le problème réside dans le fait que ': object_id' signifie quelque chose de spécial pour Rails/Ruby et que l'utilisation de chaînes contourne ce problème. Mais 'foreign_key' et' primary_key' n'ont pas besoin d'être affectés à 'Strings'. Je préfère utiliser des symboles, c'est plus propre et plus cohérent avec le reste des missions Rails. –

Questions connexes