我有这个自由格式的SQL,当运行时返回产品的名称,关联属性的名称和该属性的值。我想要解决的是如何使用Ruby on Rails和Active Record
自由格式查询
select menu_items.name, menu_attributes.name, menu_attributes_items.menu_attribute_value from menu_attributes, menu_items, menu_attributes_items, venues
where menu_items.id = menu_attributes_items.menu_item_id
and menu_attributes.id = menu_attributes_items.menu_attribute_id
and venues.id = menu_attributes_items.venue_id
and menu_attributes.name = 'Price'
这是我当前的HAMl模板,虽然它只返回一个属性列表,例如Price,Size而不是像SQL那样的值
- for item in @venue.menu_items
.grid-content
.card
= image_tag("drinks/#{item.name.titlecase.tr(' ','-')}.png")
%img{:src => "http://placehold.it/400x200?text=Coffee"}
.card-divider
= item.name
.card-section
%h4
- for attr in item.menu_attributes
= attr.name
= MenuItem.joins({ menu_attributes: :menu_attributes_items }, :venues).where('menu_items.id = menu_attributes_items.menu_item_id AND menu_attributes.id = menu_attributes_items.menu_attribute_id AND menu_attributes.id = menu_attributes_items.menu_attribute_id AND venues.id = menu_attributes_items.venue_id AND menu_attributes.name = ?', 'Price').select('menu_items.name, menu_attributes.name, menu_attributes_items.menu_attribute_value')
更新 价格#尺寸#尺寸#
答案 0 :(得分:0)
根据您的模型之间的关联以及轻微的SQL,您的查询可以使用ActiveRecord以这种方式编写:
MenuItem.joins({ menu_attributes: :menu_attributes_items }, :venues)
.where('menu_items.id = menu_attributes_items.menu_item_id AND menu_attributes.id = menu_attributes_items.menu_attribute_id AND menu_attributes.id = menu_attributes_items.menu_attribute_id AND venues.id = menu_attributes_items.venue_id AND menu_attributes.name = ?', 'Price')
.select('menu_items.name, menu_attributes.name, menu_attributes_items.menu_attribute_value')