Sql 获取ActiveRecord::关系对象的名称

Sql 获取ActiveRecord::关系对象的名称,sql,ruby-on-rails,ruby,activerecord,Sql,Ruby On Rails,Ruby,Activerecord,下午好, 我有一个月的模型,它有许多旅馆。一家酒店属于一个月,有一个名字、信息、图片、推特id等,还有一个赢家栏,这是一个布尔值。在我几个月的索引视图中,每个月我都想显示“赢家”为真的酒店名称 我一直在尝试以下问题: <% @months.each do |month| %> <td><%= month.date %></td> <td><%= month.created_at.strftime("%v") %&g

下午好,

我有一个月的模型,它有许多旅馆。一家酒店属于一个月,有一个名字、信息、图片、推特id等,还有一个赢家栏,这是一个布尔值。在我几个月的索引视图中,每个月我都想显示“赢家”为真的酒店名称

我一直在尝试以下问题:

<% @months.each do |month| %>
    <td><%= month.date %></td>
    <td><%= month.created_at.strftime("%v") %></td>
    <td><%= month.hotels.where(winner: "true") %></td>
<% end %>

如果你需要更多的代码,就大声喊。为安迪干杯

假设每个月有一个赢家:

month.hotels.where(winner: "true").first.try(:name)
如果有很多赢家,您可以:

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

这将返回一个包含所有获奖者姓名的数组。

当您执行
where
查询时,它将返回一个hotels对象数组。也许您应该尝试使用
find_by
替代方法来检索这样一家酒店:

month.hotels.find_by_winner(true).name
编辑:



这样,仅当winner不是nil时才会调用name方法。

Hi Erez,这似乎只检索对应月份下第一家酒店的名称。我的一个月还没有赢家,所以它不应该显示任何东西,但通过删除名称返回“Ritz”Hi Murifoz。此名称正确检索赢家酒店。我的一个月没有赢家,正确地说,什么都没有。但是,在调用.name时,它会因Nilclass的未定义方法名而出错。这个名称问题令人费解?好吧,如果这个月没有赢家,它会返回nil,如果你调用nil上的.name方法,它会给你这个错误。你可以做的是执行一个零检查。我将编辑答案。绝对的传奇,我没有想到!谢谢你,福克斯!安迪
month.hotels.find_by_winner(true).name
<% winner = month.hotels.find_by_winner(true) %>
<%= winner.name if winner %>