下午所有,
我有一个月模型,有很多酒店。一个酒店属于一个月,有一个名字,信息,图片,twitter_id等和一个赢家列,这是一个布尔值。在几个月的索引视图中,我希望每个月都能显示“胜利者”为真的酒店名称。
我一直在尝试以下查询;
<% @months.each do |month| %>
<td><%= month.date %></td>
<td><%= month.created_at.strftime("%v") %></td>
<td><%= month.hotels.where(winner: "true") %></td>
<% end %>
然后返回; #<ActiveRecord::Relation:0x007fae1ed9cd70>
(在末尾打上.name只给出了“hotel”的关系名称)
我如何执行检索获奖酒店名称的查询?
任何指针都非常棒,谢谢,我的代码如下;
months_controller.rb
def show
@month = Month.find(params[:id])
@hotels = @month.hotels
end
def index
@months = Month.paginate(page: params[:page], per_page: 10).includes(:hotels)
end
如果您需要更多代码,请大声喊叫。欢呼安迪
答案 0 :(得分:1)
假设每个月有一名获胜者:
month.hotels.where(winner: "true").first.try(:name)
如果可能有很多获奖者,你可以这样做:
month.hotels.where(winner: "true").pluck(:name)
这将返回所有获奖者名称的数组。
答案 1 :(得分:1)
当您执行where
查询时,它会返回一个酒店对象的数组。也许您应该尝试使用find_by
替代方案来检索这样的酒店:
month.hotels.find_by_winner(true).name
编辑:
<% winner = month.hotels.find_by_winner(true) %>
<%= winner.name if winner %>
这样只有在获胜者不是零时才会调用name方法。