分享 ransack 的 polymorphic 小坑

5swords · August 26, 2014 · Last by pudgecon replied at May 02, 2015 · 2762 hits
class Task < ActiveRecord::Base
  belongs_to :taskable, polymorphic: true
end

class FirstTask < Task
end

class Contact < ActiveRecord::Base
  # name
end

FirstTask 的对象是 contact,在用 ransack 时

写法 1:使用 meta_search 的老写法

params = {"taskable_name_cont"=>"22"}
FirstTask.search params
NameError: uninitialized constant Task::Taskable

查了好久 写法 2:网上查的

params = {"taskable_of_Contact_name_cont"=>"22"}

问题一样

写法 3:仔细看作者写的测试,发现 Contact 的首字母不仅要大写,而且后面一定要加一个'_type',有点坑啊。

params = {"taskable_of_Contact_type_name_cont"=>"22"}

和写法 1 比要自己加上'of_ClassName_type'。

我晕。我一直以为

search = Search.new(Note, :notable_of_Person_type_name_eq => 'Ernie') 

里边的type_name是一起的。非常感谢

You need to Sign in before reply, if you don't have an account, please Sign up first.