2017-02-03 35 views
0

不要被長度嚇倒。這可能實際上很簡單。我找不到答案,儘管我試圖尋找無處不在。我希望這對你來說是一個足夠好的挑戰。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 

什麼我想要做的

我想找出基於條件必須同時存在存在的父紀錄:(一)子記錄及(ii)反過來,孩子的,孩子記錄太(即盛大兒童記錄)。

這是什麼意思?

假設我們有:

enter image description here

我想找到所有的面板,其中有一個特殊的StatusDate記錄,使得StatusDate.current = Y,及其各自的孩子,Status.name = X 。

(「當前」實際上是對StatusDate記錄一個布爾值)。

什麼是此時發生的事情?

這裏是我的_condition_fields.html.erb部分:

問題是什麼?

現在,ransack會在不同的記錄中應用這些條件。但我希望它們直接適用於:(I)兒童記錄和(ii)該特定兒童的兒童記錄。

任何想法我可以做到這一點?

非常感謝。

回答

0

你嘗試查詢方式如下:

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

你會知道我如何從PARAMS訪問這些變量? – BKSpurgeon

+0

你的意思是要求參數?你需要在參數中傳遞'StatusDate_current'和'StatusDate_Status_name'的值,否? –

+0

當實際值嵌套時,這很棘手,還沒有解決。我仍在研究它。我會回來找到答案後發佈。感謝幫助。 – BKSpurgeon