ruby-on-rails - 将自由格式的 sql 转换为事件记录

标签 ruby-on-rails postgresql haml model-associations

我有这个 sql 查询,我希望能够在我的 ruby​​ on 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'

我的模型设置如下

field

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

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

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

关于ruby-on-rails - 将自由格式的 sql 转换为事件记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32477607/

相关文章:

ruby-on-rails - link_to 为 :protocol for https

postgresql - 如何在更新链结束时触发触发器?

mysql - 如何实现两个数据库表之间的同步?

node.js - Postgresql: ""ViewShifts 处或附近的语法错误""为什么我在下面的查询中出现此错误?

html - HAML 中的条件 HTML 标记

ruby-on-rails - Rails 路由重定向到内部 url

ruby-on-rails - Rails has_one 每个作用域

ruby-on-rails - OS X 和 Windows 之间的文件权限发生了变化

ruby-on-rails - 带测试的 HAML 换行问题

html - HTML.haml 中的复选框列表