0

整个下午,

我有一个月模型,其中有很多酒店。一家酒店属于一个月,有一个名称、信息、图片、twitter_id 等和一个获胜者列,这是一个布尔值。在我几个月的索引视图中,每个月我都想显示“赢家”为真的酒店名称。

我一直在尝试以下 where 查询;

<% @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 最后只是给出“酒店”的关系名称)

如何执行检索获胜酒店名称的查询?

任何指针都会非常感谢,我的代码如下;

月控制器.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

如果您需要更多代码,请大声喊叫。欢呼安迪

4

2 回答 2

1

假设每个月有一名获胜者:

month.hotels.where(winner: "true").first.try(:name)

如果可能有很多获胜者,您可以这样做:

month.hotels.where(winner: "true").pluck(:name)

这将返回所有获胜者姓名的数组。

于 2012-08-28T14:13:45.413 回答
1

当您进行where查询时,它会向您返回酒店对象的数组。也许您应该尝试使用另一种find_by方法来仅检索一个这样的酒店:

month.hotels.find_by_winner(true).name

编辑:

<% winner = month.hotels.find_by_winner(true) %>
<%= winner.name if winner %>

这样,只有当获胜者不是 nil 时才会调用 name 方法。

于 2012-08-28T14:18:38.327 回答