2017-06-20 24 views
0

條款目前我有這個疑問:軌道4,其中上嵌套連接表

Mother.joins(camp: [{ sub_center: [{ health_center: :block }] }]) 

基本上通過campsub_center加入mother表到block表,health_center表(我知道這是一個很多采取)。我希望能夠做這樣的事情:

Mother.joins(camp: [{ sub_center: [{ health_center: :block }] }]).where(sub_center_id: 1) 

但是,我得到sub_center_id是一個未定義的列PG::UndefinedColumn: ERROR: column mothers.sub_center_id does not exist

我如何得到它來查詢camp.sub_center_id而不是mother.sub_center_id?換句話說,我如何在嵌套連接表上執行where子句?

下面是給定的表的模式:

create_table "mothers", force: :cascade do |t| 
    t.integer "camp_id" 
    t.integer "eligible_couple_id" 
    t.string "pcts_id" 
    t.integer "thumb_id" 
    t.string "survey_id" 
    t.string "necklace_id" 
    t.integer "necklace_replacement_number", default: 0 
    t.boolean "facility_referral_true",  default: false 
    t.float "weight_at_las_pnc" 
    t.integer "created_by" 
    t.integer "updated_by" 
    t.datetime "created_at",         null: false 
    t.datetime "updated_at",         null: false 
    t.string "reg_id" 
    t.string "nfc_data" 
    t.datetime "date_of_registration" 
    t.integer "status",      default: 1,  null: false 
    t.datetime "deleted_at" 
    t.datetime "completed_at" 
    end 

create_table "camps", force: :cascade do |t| 
    t.string "english_name" 
    t.string "local_name" 
    t.float "latitude" 
    t.float "longitude" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
    t.integer "created_by" 
    t.integer "updated_by" 
    t.integer "sub_center_id" 
    t.integer "week_of_the_month" 
    t.integer "status",   default: 1 
    t.integer "day" 
    t.datetime "deleted_at" 
    end 

    create_table "health_centers", force: :cascade do |t| 
    t.integer "block_id" 
    t.string "english_name" 
    t.string "local_name" 
    t.boolean "phc_true",   default: false 
    t.boolean "ipd_true",   default: false 
    t.boolean "fru_true",   default: false 
    t.boolean "always_open_true", default: false 
    t.string "phone_number" 
    t.integer "created_by" 
    t.integer "updated_by" 
    t.datetime "created_at",      null: false 
    t.datetime "updated_at",      null: false 
    t.integer "status",   default: 1 
    t.datetime "deleted_at" 
    end 

create_table "sub_centers", force: :cascade do |t| 
    t.integer "health_center_id" 
    t.string "english_name" 
    t.string "local_name" 
    t.boolean "phc_true",   default: false 
    t.boolean "ipd_true",   default: false 
    t.boolean "fru_true",   default: false 
    t.boolean "always_open_true", default: false 
    t.string "phone_number" 
    t.float "latitude" 
    t.float "longitude" 
    t.integer "created_by" 
    t.integer "updated_by" 
    t.datetime "created_at",      null: false 
    t.datetime "updated_at",      null: false 
    t.integer "status",   default: 1 
    t.datetime "deleted_at" 
    end 

    create_table "blocks", force: :cascade do |t| 
    t.string "english_name" 
    t.string "local_name" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
    t.integer "created_by" 
    t.integer "updated_by" 
    t.integer "status",  default: 1 
    t.datetime "deleted_at" 
    end 

回答

2

您可以隨時使用字符串的方法引用該列,而不是象徵之一。

Mother. 
    joins(camp: { sub_center: { health_center: :block } }). 
    where('camps.sub_center_id = ?', 1) 

或與符號方法

Mother. 
    joins(camp: { sub_center: { health_center: :block } }). 
    where(camps: { sub_center_id: 1 })