2016-10-14 2 views
0

У меня есть отношения habtm между Dish и DailyMenu. Вот областьпроблемы с областью в habtm

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)) } 

Он предназначен для поиска блюд определенного типа, которые в настоящее время не включены в меню. К сожалению, это работает неправильно. Нужна помощь, пожалуйста DishType модель

class DishType < ActiveRecord::Base 
include DishTypeSetter 
enum meal:[:main_course, :second_course, :drink] 
end 

Dish модель

class Dish < ActiveRecord::Base 
    has_and_belongs_to_many :daily_menus 
    has_many :orders 
    has_many :users, through: :orders 
    belongs_to :dish_type 

    scope :main_meals, -> { joins(:dish_type).where('meal = ?', 0) } 
    scope :second_meals, -> { joins(:dish_type).where('meal = ?', 1) } 
    scope :drinks, -> { joins(:dish_type).where('meal = ?', 2) } 

    #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| 
where(joins(:daily_menus).where('daily_menu_id != ? AND dish_type_id = ?', daily_menu_id, type_id)) 

}

validates :dish_type, :name, presence: true 
    validates :name, uniqueness: { scope: :dish_type_id } 

end 

модель Меню

class DailyMenu < ActiveRecord::Base 
has_and_belongs_to_many :dishes 
has_many :orders 
has_many :users, through: :orders 
end 

Также о модели DishType - он имеет только has_man у блюда ассоциации (я переехал это забота)/Но это не имеет HAS_MANY daily_menus/

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", force: :cascade do |t| 
    t.integer "daily_menu_id" 
    t.integer "dish_id" 
end 

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

create_table "dishes", force: :cascade do |t| 
    t.string "name" 
    t.integer "type" 
    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 
+0

DishType mpdel –

ответ

2
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) 
} 
+0

Я выглядит правильно, но не workn (это выбрать все блюда, созданные прямо сейчас –

+1

@ anti-k, в какой таблице находится 'daily_menu_id'? –

+0

Его отдельный стол –

Смежные вопросы