分享 ransack 的 polymorphic 小坑

5swords · 2014年08月26日 · 最后由 pudgecon 回复于 2015年05月02日 · 2769 次阅读
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是一起的。非常感谢

需要 登录 后方可回复, 如果你还没有账号请 注册新账号