Ransack:孩子及其各自的孙子记录的条件

时间:2017-02-03 08:10:02

标签: ruby-on-rails ransack

不要被长度吓倒。它实际上可能很简单。虽然我试着到处寻找,但我找不到答案。我希望这对你来说是一个足够好的挑战。

这里是:

Panel.rb
    has_many :status_dates
    has_many :statuses, through: :status_dates

StatusDate.rb
    belongs_to :status
    belongs_to :panel

    def self.ransackable_attributes(auth_object = nil)
            %w( current ) + _ransackers.keys
    end

Status.rb
    has_many :status_dates

这是架构。

create_table "panels", force: :cascade do |t|
    t.string   "no"
    t.integer  "project_id"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
  end

create_table "status_dates", force: :cascade do |t|
    t.integer  "status_id"
    t.integer  "panel_id"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.date     "date"
    t.boolean  "current"
  end

  add_index "status_dates", ["panel_id"], name: "index_status_dates_on_panel_id"
  add_index "status_dates", ["status_id"], name: "index_status_dates_on_status_id"

  create_table "statuses", force: :cascade do |t|
    t.string   "name"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
  end

我想做什么

我想根据两个条件识别父记录,这些条件必须同时存在两者 :( i)子记录和(ii)依次孩子的孩子记录(即大孩子记录)。

这是什么意思?

假设我们有:

enter image description here

我想找到所有面板,其中有一个特定的StatusDate记录,例如StatusDate.current = y,以及它各自的子节点Status.name = x。

(“当前”实际上是StatusDate记录的布尔值。)

目前发生了什么?

这是我的_condition_fields.html.erb部分:

                                                     

有什么问题?

现在,ransack在不同记录中应用这些条件。但我希望它们直接应用于:(I)儿童记录和(ii)特定儿童的儿童记录。

知道我该怎么做吗?

非常感谢。

1 个答案:

答案 0 :(得分:0)

您是否按以下方式尝试查询:

Panel.ransack({StatusDate_current:0, StatusDate_Status_name: "Installed"})