Question

Supposons que je rédige une application de bibliothèque pour une société d'édition qui possède déjà une application People.

Donc, dans mon application de bibliothèque, j'ai

class Person < ActiveResource::Base
  self.site = "http://api.people.mypublisher.com/"
end

et maintenant je veux stocker Article s pour chaque Personne :

class Article < ActiveRecord::Base
  belongs_to :person, :as => :author
end

J'imagine que j'aurais le tableau suivant dans ma base de données:

Articles
id (PK) | title (string) | body (text) | author_id (integer)

author_id n'est pas exactement une clé étrangère, car je n'ai pas de table Personnes. Cela laisse plusieurs questions:

  1. comment indiquer à mon objet Personne ActiveResource qu'il a_many Articles ?

  2. Articles.find (: first) .author fonctionnera-t-il? appartient_à même s'il n'y a pas de ActiveRecord ni de table de support?

Était-ce utile?

La solution

Comme vous l'avez fait remarquer, vous abandonnez beaucoup parce qu'ActiveResource n'a pas d'associations au sens d'ActiveRecord.

Vous avez déjà trouvé la réponse à la question n ° 1. En ce qui concerne la question n ° 2, votre article de modèle ActiveRecord devrait se comporter parfaitement lorsqu'il est configuré avec un paramètre "quot_appart_to". association à un modèle ActiveResource. C'est Aritcle.find (: first) .author devrait retourner l'objet personne que vous voulez.

Autres conseils

Je suppose que l'une des possibilités pour # 1, en supposant que je puisse en obtenir le fonctionnement, est de procéder ainsi:

class Person < ActiveResource::Base
  self.site = "http://api.people.mypublisher.com/"

  def articles
    Article.find(:all, :conditions => { :person_id => self.id })
  end

  def add_article(article)
    article.person_id = self.id
  end
end

Mais il perd beaucoup de ce que has_many propose.

Je pense qu'une meilleure solution serait de créer une méthode qui renvoie une portée.

class Person < ActiveResource::Base
  self.site = ..
. 
  def articles
    Article.for_person(self.id)
  end
end

class Article < ActiveRecord::Base
  named_scope :for_person, lambda { |pid| { :conditions => { :person_id => pid }}}
end
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top