2015-09-09 3 views
1

у меня есть этот SQL запрос, который я хочу, чтобы иметь возможность использовать в моем рубин на рельсы проектапреобразования произвольной формы SQL для активной записи

Запрос

select menu_items.name, menu_attributes.name, 
menu_attributes_menu_items_venues.menu_attribute_value from menu_attributes, menu_items, menu_attributes_menu_items_venues, venues 
where menu_items.id = menu_attributes_menu_items_venues.menu_item_id 
and menu_attributes.id = menu_attributes_menu_items_venues.menu_attribute_id 
and venues.id = menu_attributes_menu_items_venues.venue_id 
and menu_attributes.name = 'Price' 

У меня есть мои настройки модели как

Центры

has_and_belongs_to_many :menu_items 
has_and_belongs_to_many :menu_attributes_menu_items_venues 

меню Атрибуты

belongs_to :menu_item 
belongs_to :venue 

Пункты меню

has_and_belongs_to_many :venue 
has_and_belongs_to_many :orders 
has_and_belongs_to_many :menu_attributes_menu_items_venues 

Я тогда в надежде быть в состоянии сделать что-то вроде этого в моем шаблоне Haml

- for item in @venue.menu_items 
     .card 
      %img{:src => "http://placehold.it/400x200?text=Coffee"} 
      .card-divider 
       = item.name 
      .card-section 
       %h4= item.menu_attributes.name.price 

ответ

0

Попробуйте это:

MenuAttribute.joins([{ menu_item: :menu_attributes_menu_items_venues }, :venue]). 
    where('menu_items.id = menu_attributes_menu_items_venues.menu_item_id'). 
    where('menu_attributes.id = menu_attributes_menu_items_venues.menu_attribute_id'). 
    where('venues.id = menu_attributes_menu_items_venues.venue_id'). 
    select("menu_items.name", "menu_attributes.name", "menu_attributes_menu_items_venues.menu_attribute_value") 

Вы на самом деле не» t даже нужны эти where, если ассоциации установлены правильно, и таблица имеет правильные внешние ключи.

Таким образом, вы должны быть в состоянии просто сделать что-то вроде этого:

MenuAttribute.joins([{ menu_item: :menu_attributes_menu_items_venues }, :venue]). 
    select("menu_items.name", "menu_attributes.name", "menu_attributes_menu_items_venues.menu_attribute_value") 

Позвольте мне знать, если он работает или нет. Я могу обновить свой ответ после получения ваших отзывов.

+0

Невозможно достичь этого посредством активной записи? –

+0

чистая активная запись? Наверное, нет. –

+0

Я получил это далеко - за пункт в @ site.menu_items .card % img {: src => "http://placehold.it/400x200?text=Coffee"} .card-divider = item.name .card-section % h4 - для attr в item.menu_attributes –

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