限制:finder_sql

时间:2009-02-03 22:44:07

标签: ruby-on-rails ruby activerecord has-many table-relationships

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

2 个答案:

答案 0 :(得分:3)

这意味着当你在表之间有一个has_many关系时,如:

人  has_many:books,:finder_sql

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

答案 1 :(得分: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.