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 を平手打ちすると、「ホテル」のリレーション名が表示されます)

優勝したホテルの名前を取得するクエリを実行するにはどうすればよいですか?

私のコードは次のとおりです。

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

さらにコードが必要な場合は、叫んでください。乾杯アンディ

4

2 に答える 2

1

クエリを実行するwhereと、hotelsオブジェクトの配列が返されます。たぶん、次のfind_byような1つのホテルだけを取得するための代替手段を使用するようにしてください。

month.hotels.find_by_winner(true).name

編集:

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

このように、nameメソッドは、勝者がnilでない場合にのみ呼び出されます。

于 2012-08-28T14:18:38.327 に答える
1

各月に 1 人の勝者がいると仮定します。

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

多くの勝者がいる可能性がある場合は、次のことができます。

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

これは、すべての勝者の名前の配列を返します。

于 2012-08-28T14:13:45.413 に答える