Ruby on Rails通过关联来估值

时间:2015-10-25 12:21:10

标签: sql ruby-on-rails postgresql activerecord haml

我有这个自由格式的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')

更新 价格#尺寸#尺寸#

1 个答案:

答案 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')