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
2
A
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.
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
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. –