2016-10-15 13 views
0

(.Iの作成に失敗するのHABTM関係を持つ2つのモデルを持っているは、私が立ち往生propperのHABTMスコープ

create_table "daily_menus", force: :cascade do |t| 
    t.string "day" 
    t.datetime "created_at", null: false 
    t.datetime "updated_at", null: false 
    t.date  "date" 
    end 

    add_index "daily_menus", ["day"], name: "index_daily_menus_on_day", unique: true, using: :btree 

    create_table "daily_menus_dishes", id: false, force: :cascade do |t| 
    t.integer "daily_menu_id" 
    t.integer "dish_id" 
    end 

    add_index "daily_menus_dishes", ["daily_menu_id", "dish_id"], name: "index_daily_menus_dishes_on_daily_menu_id_and_dish_id", using: :btree 

    create_table "dish_types", force: :cascade do |t| 
    t.integer "meal" 
    end 

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

    add_index "dishes", ["dish_type_id", "name"], name: "index_dishes_on_dish_type_id_and_name", unique: true, using: :btree 

も料理にhas_manyの関係でdish_typeの表:。。私は必要なものの料理は、すべての範囲であります指定されたタイプの料理メニューに既にあるものを除いて含まれることになる。2日目、この問題とイムの戦い。いくつかの助けを必要としています。ここに私の最後の障害atteptsがある

#scope :menu_available, -> (type_id, daily_menu_id){ where('dish_type_id = ?', type_id) & where(joins(:daily_menus).where.not('daily_menu_id = ?', daily_menu_id)) } 

    #scope :menu_available, lambda { |type_id, daily_menu_id| joins(:daily_menus).where('dishes.dish_type_id = ? AND daily_menus.id != ?', type_id, daily_menu_id) } 
    #scope :menu_available, lambda { |daily_menu_id| joins(:daily_menus).where('daily_menus.id is NULL AND daily_menus.id != ?', daily_menu_id) } 
    scope :menu_available, -> { joins(:daily_menus).where(daily_menus: { id: 17 }) } 
    scope :menu_available, -> { where("dish_type_id = ?", 14).joins(:daily_menus).where("daily_menu_id != ?", 17)} 

私はそれが今、小さな成功を持っていますメニューに含まれていない料理をすべて見つけます

scope :without_menu, -> { joins('LEFT JOIN daily_menus_dishes ON dishes.id = daily_menus_dishes.dish_id').where('daily_menus_dishes.daily_menu_id is NULL')} 

もう少し大きな成功!

scope :without_menu, -> { joins('LEFT JOIN daily_menus_dishes ON dishes.id = daily_menus_dishes.dish_id').where('daily_menus_dishes.daily_menu_id is NULL OR daily_menus_dishes.daily_menu_id != ?', 14) } 

答えて

0

私が得たものは、リファクタリングすることができますか?

scope :without_menu, -> { joins('LEFT JOIN daily_menus_dishes ON dishes.id = daily_menus_dishes.dish_id').where('daily_menus_dishes.daily_menu_id is NULL OR daily_menus_dishes.daily_menu_id != ?', 14).where(dish_type: 14).order('name ASC') } 
関連する問題