2

Dans une application rails, j'utilise l'option: finder_sql dans une déclaration has_many. Les docs de rails disent que quand je fais ceci, "find_in_collection n'est pas ajouté." Qu'est-ce que ça veut dire?limitations de: finder_sql

Répondre

3

cela signifie que lorsque vous avez une relation has_many entre les tables comme:

personne has_many: livres,: finder_sql

vous obtiendrez pas le person.books.find * méthodes vous auriez obtenu normalement ont . la raison de ce comportement est que activerecord ne peut pas facilement composer le finder_sql avec la découverte des méthodes de * vous utiliserez, donc il ne peut pas vraiment vous donner cette fonctionnalité

3

Cela signifie qu'il ne supporte pas la méthode pour trouver une instance dans une collection. Les docs l'appellent find_in_collection (où "collection" est quel que soit le nom de votre association). Un exemple pourrait être plus utile ici:

class Author < ActiveRecord::Base 
    has_many :posts 

    has_many :special_posts, :class_name => "Post", 
      :finder_sql => "SELECT * FROM posts WHERE ..." 
end 

author.find_in_posts(30)   # it finds and returns post 30 
author.find_in_special_posts(30) # not supported because finder_sql is used here. 
+0

Salut avit, Je ne suis pas sûr de ce que vous vouliez dire par « la méthode pour trouver une instance dans une collection find_in_collection ». En fait, je n'étais même pas sûr de savoir comment analyser cela. Sinon, votre exemple aurait rendu votre réponse meilleure que celle de Cyrik. Dan – allyourcode

+0

Edité ... j'espère que cela a plus de sens maintenant: je me référais à ce que la méthode a été appelée dans les docs, alors qu'il s'agit en fait d'une méthode métaprogrammée basée sur le nom de votre collection. –

Questions connexes