【发布时间】:2016-07-07 18:49:37
【问题描述】:
我有一个搜索方法和两个模型,餐馆和菜单。在菜单搜索方法中,如果我搜索“鸡肉”,它会显示离卖餐地点最近的餐馆,其中包含单词“鸡肉”示例“鸡肉三明治”使用关联。问题是,如果一家餐厅出售多份鸡肉餐,则该餐厅会多次呈现。我希望能够显示一次餐厅,当单击按钮时,一个模式会显示名称中带有“鸡肉”的餐点,如果有的话是多餐鸡肉。我尝试在 ActiveRecord 和控制器中添加 uniq & uniq(&:restaurant_id) 并尝试使用 sql 进行“DISTINCT”,但没有。
控制器
def search_for_menus
#@restaurant= Menu.restaurant.all
@menus = Menu.search_for_menus(params)
end
菜单模型
belongs_to :restaurant
reverse_geocoded_by "restaurants.latitude", "restaurants.longitude"
def self.search_for_menus(params)
menus=Menu.where("dish LIKE ?", "%#{params[:dish]}%") if params[:dish].present?
menus = menus.where("menus.price <=?",params[:max ])
menus = menus.where("menus.price >=?",params[:min ])
menus= menus.joins(:restaurant).near(params[:location],2)
menus
end
end
搜索页面 HTML
<% if @menus.present? %>
<%@menus.each do |menu| %>
<br>
<br>
<div id ="restaurants">
<div class="box">
<div class="thumbnail box-image">
<%= link_to (image_tag (menu.restaurant.thumbnail.url(:medium))),restaurant_path(menu.restaurant),'data-no-turbolink' => true%>
<div class="caption">
<h3 class="text-center"><%=menu.restaurant.name%></h3>
<p class="text-center"><a href="#" class="btn btn-primary text-center" role="button" data-toggle="modal" data-target="#modal-<%= menu.id %>">View Food</a></p>
</div>
</div>
</div>
<div id="modal-<%= menu.id %>" class="modal fade bs-example-modal-sm" tabindex="-1" role="dialog" aria-labelledby="mySmallModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-body">
<div class="col-md-6">
<p><%= menu.dish %></p>
</div>
<div class="col-md-6">
<p><%= menu.price %></p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">OK</button>
</div>
</div>
</div>
</div>
</div>
<%end%>
</div>
<%else%>
<p>no posts</p>
<%end%>
【问题讨论】:
-
该菜单是否属于超过 1 家餐厅?请注意,如果
params[:dish]不存在,这将完全中断。 -
每条菜单记录都属于特定的餐厅,因此 ID 为 1 的菜单属于 ID 为 33 的餐厅, ID 为 3 的菜单可以属于 ID 为 35 的餐厅。感谢您提供这道菜的小费,我们会更改跨度>
标签: ruby-on-rails ruby web-deployment