将自由格式 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")
让我知道它是否有效。收到您的反馈后,我可以更新我的答案。
我有这个 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")
让我知道它是否有效。收到您的反馈后,我可以更新我的答案。