2017-02-03 56 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 

は何私はをしたいですか?

私は両方が同時に上に存在して存在している必要があります2つの条件に基づいて、親レコードを識別します:あまりにも(I)子レコードと、(ii)順番に、その子の、子レコード(つまり、壮大子レコード)。

それはどういう意味ですか?

我々が持っていると仮定します。

enter image description here

なStatusDate.current = Y、およびそのそれぞれの子、Status.name = Xその特定StatusDateレコードがある場合、私は、すべてのパネルを見つけたいです。

(「現在」は、実際にStatusDateレコードにブール値です。)

の瞬間に何が起こっていますか?ここで

私_condition_fields.html.erbが部分的である:

問題は何ですか?

今のところ、ransackはこれらの条件をさまざまなレコードに適用します。しかし、私はそれらを直接、(I)子供の記録、(ii)その特定の子供の子供の記録にも適用したい。

どうすればいいですか?

ご協力いただきありがとうございます。

答えて

0

あなたは道次のクエリを試してみました:

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

あなたは私がのparamsからこれらの変数にアクセスする方法を知っているだろうか? – BKSpurgeon

+0

あなたはリクエストパラメータを意味しますか? paramsに 'StatusDate_current'と 'StatusDate_Status_name'の値を渡す必要がありますか? –

+0

実際の値がネストされているときはやっかいですが、まだそれを処理していません。私はまだそれを調べている。私は戻ってきて、見つけたら答えを投稿します。ヘルプに感謝します。 – BKSpurgeon