Ruby Rails 值(按关联)

Ruby on Rails value by association

我有这个自由形式 SQL 当 运行 returns 产品名称、关联属性的名称和该属性的值时。我想要解决的是如何在 Rails 和 Active Record

上使用 with Ruby

自由格式查询

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 模板,尽管它只是 returns 属性列表,即价格、尺寸,而不是像 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')

更新 价格#尺码#尺码#

根据您的模型之间的关联,并且仍然有一点 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')