2

在 Rails 应用程序中,我在 has_many 声明中使用 :finder_sql 选项。rails 文档说,当我这样做时,“不添加 find_in_collection”。这是什么意思?

4

2 回答 2

3

这意味着当您与表之间存在 has_many 关系时,例如:

人 has_many :books, :finder_sql

你不会得到你通常会得到的 person.books.find* 方法。这种行为的原因是 activerecord 无法轻松地使用您将使用的 find* 方法组合 finder_sql,因此它不能真正为您提供该功能

于 2009-02-04T00:31:04.760 回答
3

这意味着它不支持在集合中查找实例的方法。文档称它为find_in_collection(其中“收藏”是您协会的名称)。一个例子在这里可能更有帮助:

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.
于 2009-02-04T08:15:09.627 回答