Question

J'ai juste mis à niveau vers Ruby 2.0 qui, par défaut, la charge ActiveRecord 4 pour un Padrino app.C'est très bien, j'aimerais profiter de l'Ruby 2.0 et AR 4 améliorations.Cependant, je vais avoir de la difficulté à la réécriture de certaines des relations qui ont travaillé avant.

Par exemple, ce n'est plus valide:

  has_many :dvd_credits, :order => 'position', :include => [:dvd_actor, :dvd_role]

Il donne une déconseillé d'avertissement, mais l'exemple qu'il montre c'est inutile: has_many :spam_comments, -> { where spam: true }, class_name: 'Comment'

En regardant autour, j'ai pu constater que cela fonctionne en omettant l' :include paramètre:

has_many :dvd_credits, -> { order :position }

Si je l'ajoute comme suit:

has_many :dvd_credits, -> { order :position, include: [:dvd_actor, :dvd_role] }

J'ai cette erreur lorsque j'appelle cette relation:

ArgumentError: Direction should be :asc or :desc

Je suis toujours aux prises avec les changements à AR 4 mais voudrais vraiment l'apprécier un peu d'aide sur ce.

Merci.

PS Je n'ai trouve cela dans l'AR 4 page:

Il n'y a pas besoin d'utiliser comprend immédiatement associations - qui est, si vous avez l'Ordre belongs_to :le client, le client est désireux chargés automatiquement lorsque cela est nécessaire.

Ce qui, pour moi cela signifie que je peux ignorer le include: paramètre?

Mais cette relation est un peu complexe, il va comme ceci:

class Dvd < ActiveRecord::Base
  has_many :dvd_credits, -> { order :position }
  has_many :dvd_actors, :through => :dvd_credits
  has_many :dvd_roles, :through => :dvd_credits

class DvdCredit < ActiveRecord::Base
  belongs_to :dvd_actor, :inverse_of => :dvd_credits
  belongs_to :dvd_role, :inverse_of => :dvd_credits
  belongs_to :dvd, :inverse_of => :dvd_credits

class DvdActor < ActiveRecord::Base
  has_many :dvd_credits, :inverse_of => :dvd_actors
  has_many :dvds, :through => :dvd_credits

Mais semble remplir les belongs_to condition.

Était-ce utile?

La solution

Oui, vous pouvez simplement ignorer l' :include partie.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top