2017-06-20 10 views
0

の句は、現在、私はこのクエリを持っている4:Railsのネストされた結合テーブル

Mother.joins(camp: [{ sub_center: [{ health_center: :block }] }]) 
本質的 campを通じて blockテーブルに motherテーブルを結合し

sub_center、およびhealth_centerテーブル(私はそれが多くのことを知っています取る)。私はsub_center_idが、私はそれがcamp.sub_center_id代わりのmother.sub_center_id照会してもらうにはどうすればよいの未定義の列PG::UndefinedColumn: ERROR: column mothers.sub_center_id does not exist

であることを取得する、しかし

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

:私はこのような何かを行うことができるようにしたいですか?言い換えれば、入れ子にされたテーブルに対して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

あなたは常に列、代わりのシンボル1を参照するために、文字列のメソッドを使用することができます。

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 }) 
関連する問題