Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 两级深度上的活动管理筛选器属于关联_Ruby On Rails_Activeadmin - Fatal编程技术网

Ruby on rails 两级深度上的活动管理筛选器属于关联

Ruby on rails 两级深度上的活动管理筛选器属于关联,ruby-on-rails,activeadmin,Ruby On Rails,Activeadmin,假设一个人有许多房子,房子有许多门。(因此,Door有一个house\u id,house有一个person\u id字段)。我在Active Admin中有一个门的列表,其中我需要一个过滤器,允许我选择一个人,并显示该人所有房子中的所有门 ActiveAdmin.register Door do filter :knob_color filter :is_open filter :has_window filter :house_person # DOESN'T W

假设一个
有许多
房子
房子
有许多
。(因此,
Door
有一个
house\u id
,house有一个
person\u id
字段)。我在Active Admin中有一个门的列表,其中我需要一个过滤器,允许我选择一个人,并显示该人所有房子中的所有门

ActiveAdmin.register Door do
  filter :knob_color
  filter :is_open
  filter :has_window

  filter :house_person      # DOESN'T WORK
  filter :house_person_name # DOESN'T WORK
Person
model表中有一个
name
字段,因此ActiveAdmin应该能够选择该字段

我该怎么做

更新 根据要求,我的情况在模型中重新表述

# id:   integer
# name: string
class Person < ActiveRecord::Base
  has_many :houses
end

# id:        integer
# person_id: integer
class House < ActiveRecord::Base
  belongs_to :person
  has_many   :doors
end

# id:         integer
# house_id:   integer
# knob_color: string
# is_open:    boolean
# has_window: boolean
class Door < ActiveRecord::Base
  belongs_to :house
end
#id:integer
#名称:string
类Person
您需要通过
house
使用
has\u one
关系在
Door
上注册一个
关联,然后您可以直接添加过滤器

class Door < ActiveRecord::Base
  belongs_to :house
  has_one :person, through: :house
end

ActiveAdmin.register Door do
  filter :person
end
classdoor
请将您的模型的所有相关行关联起来。@TimoSchilling完成。啊,这是我没有想到的想法。我会马上试试这个(如果你的答案如预期的那样有效,我会接受你的答案,如果它不起作用,我会觉得很奇怪)。出于好奇的一个问题是:如果这是一个三级深度关联,你能应用这个技术吗?你可以,但要记住,每个分离度都需要一个额外的连接。如果您的表很大,这可能会很昂贵。当我尝试此操作时,会创建筛选器,但如果我尝试运行它,则会得到一个Module::DelegationError。有人见过这个吗?