Possibilité d’alias une association Appart_to dans Rails?

J’ai un modèle avec une association belongs_to :

 class Car < ActiveRecord::Base belongs_to :vendor end 

Je peux donc appeler car.vendor . Mais je veux aussi appeler car.company ! Donc, j’ai les éléments suivants:

 class Car < ActiveRecord::Base belongs_to :vendor def company vendor end end 

mais cela ne résout pas la situation d’affectation car.company = 'ford' , donc je dois créer une autre méthode pour cela. Existe-t-il un mécanisme d’ alias simple que je peux utiliser pour les associations? Puis-je utiliser alias_method :company, :vendor et alias_method :company=, :vendor= ?

Non, il ne recherche pas company_id par exemple changez votre code comme suit

En rails3

 class Car < ActiveRecord::Base belongs_to :vendor belongs_to :company, :class_name => :Vendor,:foreign_key => "vendor_id" end 

En rails4

Nous pouvons utiliser l’atsortingbut alias.

 alias_atsortingbute :company, :vendor 

Dans Rails 4, vous devriez simplement pouvoir append alias_atsortingbute :company, :vendor à votre modèle.

Version courte:

  1. Générer un modèle avec la migration

    $ rails generate model Car vendor:references name:ssortingng ...

  2. Ajouter la ligne suivante dans le modèle de Car , par exemple le fichier car.rb

     class Car < ActiveRecord::Base belongs_to :company, :class_name => 'Vendor', :foreign_key => 'vendor_id' end 
  3. Vous avez @car.company méthode d’instance @car.company .

Pour une explication détaillée, lisez à l’avance [Facultatif si vous avez compris ce qui précède !!]

Version détaillée:

Le modèle de Car sera associé au modèle de Vendor (ce qui est évident). Il devrait donc y avoir un vendor_id dans les cars table.

  1. Pour vous assurer que le champ vendor_id est présent dans la table cars , exécutez la commande suivante sur la ligne de commande. Cela générera la bonne migration. Le vendor:references sont importantes. Vous pouvez avoir n’importe quel nombre d’atsortingbuts après cela.

    $ rails generate model Car vendor:references name:ssortingng

  2. Ou bien dans la migration existante pour create_table :cars ajoutent simplement la ligne t.references :vendor

     class CreateCars < ActiveRecord::Migration def change create_table :cars do |t| t.string :name ... t.references :vendor t.timestamps end end end 
  3. La dernière chose à faire est de modifier le modèle de Car . Ajoutez donc ce code à votre fichier car.rb

     class Car < ActiveRecord::Base belongs_to :company, :class_name => 'Vendor', :foreign_key => 'vendor_id' end 

Après avoir fait la troisième étape, vous obtiendrez les méthodes d'instance suivantes pour le modèle de Car fourni par les associations Rails.

  1. @car.company

    • Lorsque vous faites @car.company il retournera un object # . Pour trouver cet object # , il va chercher la colonne vendor_id dans la table car vous avez mentionné :foreign_key => 'vendor_id'

    • Vous pouvez définir la société pour une instance de voiture en écrivant

       @car.company = @vendor || Vendor.find(params[:id]) #whichever Vendor object you want @car.save 

      Cela enregistrera l' id de cet object Vendor dans le champ vendor_id de la table cars .

Je vous remercie.

 class Car < ActiveRecord::Base belongs_to :vendor belongs_to :company, :class_name => :Vendor end