0

どのカテゴリのレビューも 5 件ではなく、特定のカテゴリの 5 件のレビューのみを表示しようとしています。比較のために機能していた後で投稿しました。

レビューにはカテゴリ ID インデックスがあり、これを使用してカテゴリ名を検索し、その名前を目的のレビューのカテゴリ名と比較します。次に、抽出した 5 つのレビューを配列に格納します (これが最も効率的な方法ですか?)。レビューとカテゴリは 2 つの別個のテーブルです。

現在、「レビューを配列に変換できません」というエラーが発生しています。これは型キャストの問題だと思いますか?Review を配列にしたくありません。@review が 5 件のレビューを保持する古いコードと同等の結果が必要です。この問題に正しく取り組んでいるかどうかはわかりません。

現在のコード

   def home
    @review = []
    idx = 1
    Review.find_each do |review|
      break if idx == 5
      @category = Category.find(review.category_id).category_name
      if @category == "Something"
        @review += review and idx+=1
      end
    end
  end

古いコード

def home
  @review = Review.find(:all, :limit => 5)
end

ご協力いただきありがとうございます!

4

1 に答える 1

1

何が起こっているのかというとreview、Reviewオブジェクトが含まれていて、それを配列に連結しようとしていますが、配列の連結は配列間でのみ機能します。

つまり、を[1,2,3]+[4]与えますが、エラーを与えます。[1,2,3,4][1,2,3]+4

<<またはを代わりに使用するかpush、レビューオブジェクトを配列でラップすることができます。

@reviews << review

また

@reviews.push review

また

@reviews += [review]

...それぞれ。


あるいは、あなたがやろうとしていることを行うためのより慣用的な方法があると確信しています。

rails3のすべてについてはまだわかりませんが、次のようになります。

Category.where(:category_name => "Something").first.reviews.limit(5)

これは、レビューとカテゴリの間の関連付けを前提としています。

レビューモデルの場合:

class Review < ActiveRecord::Base
  ...
  belongs_to :category
  ...
end

カテゴリモデルの場合:

class Category < ActiveRecord::Base
  ...
  has_many :reviews
  ...
end
于 2011-01-25T22:51:50.560 に答える