将自由格式 sql 转换为活动记录

convert freeform sql to active record

我有这个 sql 查询,我希望能够在 ruby 的 rails 项目

中使用

查询

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

试试这个:

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

如果关联设置正确并且 table 具有正确的外键,您实际上甚至不需要那些 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")

让我知道它是否有效。收到您的反馈后,我可以更新我的答案。