如何在每个循环中填充日期

时间:2014-09-19 07:08:02

标签: ruby-on-rails ruby-on-rails-4

在视图代码中:

<% @hotels.each do |h|  %>
 <%= h.hotel_Name%><% @hotelName=h.hotel_Name%>
 <%= image_tag h.hotelImage_url,:size=>'160x120'%>
 <%= image_tag('1407945135.png',:size=>'20x20',:alt=>'Logo')%>
 <%= h.hotel_location%>
 <%= link_to("ViewMenu",{:controller=>'menus',:hotel_id=>h.id}, class:'btn-orange')%>
<% end%>

在控制器中:

@hotels= Hotel.where('hotel_location LIKE ?',"%#{params[:search]}%")

**@offers=Offer.all**

我是Rails的新手。我有一个页面,用户可以看到特定城市的所有酒店。我在数据库中有两个表。第一个表名是hotels,其中酒店的所有信息都可用,另一个是offers,其中所有的优惠都可用,包括hotel_id。因此,如果id表中的hotels等于hotel_id表中的offers,我希望看到每个块中的所有商品。我怎么做?

我有另一个问题。商品表包含startDate和endDate字段。如果今天的日期介于两个日期之间或等于,我希望看到用户的报价。

2 个答案:

答案 0 :(得分:0)

在控制器中写下此查询

@hotels= Hotel.where('hotel_location LIKE ?',"%#{params[:search]}%").includes(:offers)

在视野中你可以做到

@hotels.each do |hotel|
  <%= hotel.hotel_Name%><% @hotelName=hotel.hotel_Name%>
  <%= image_tag hotel.hotelImage_url,:size=>'160x120'%>
  <%= image_tag('1407945135.png',:size=>'20x20',:alt=>'Logo')%>
  <%= hotel.hotel_location%>
  <% hotel.offers.each do |offer| %>
    <%= offer.try(:name) %>
    <%= offer.try(:coupon_code) %>
    # any offer field you want to show, try is used to avoid errors if offer is nil
  <% end %>
<% end %>

答案 1 :(得分:0)

@hotels的查询更改为:

@hotels= Hotel.includes(:offers).where('hotel_location LIKE ?',"%#{params[:search]}%")

此处includes急切地在一个查询中加载酒店的相关优惠。 More on includes here.

请确保您的 app / models / hotel.rb 中有此内容:

has_many :offers

现在,在视野中。您只需致电优惠:

<% @hotels.each do |h|  %>
 <%= h.hotel_Name%><% @hotelName=h.hotel_Name%>
 <%= image_tag h.hotelImage_url,:size=>'160x120'%>
 <%= image_tag('1407945135.png',:size=>'20x20',:alt=>'Logo')%>
 <%= h.hotel_location%>
 <% h.offers.each do |offer| %>
    <%= offer.coupon_code %>
 <% end %>
 <%= link_to("ViewMenu",{:controller=>'menus',:hotel_id=>h.id}, class:'btn-orange')%>
<% end%>