0

我试图仅显示特定类别的 5 条评论,而不是任何类别的 5 条评论。我已经发布了后者用于比较目的。

评论有一个类别 id 索引,然后我用它来查找类别名称并将该名称与我想要的评论的类别名称进行比较。然后,我将提取的 5 条评论存储在一个数组中(这是最有效的方式吗?)。评论和类别是两个单独的表格。

目前我收到错误“无法将评论转换为数组”。我猜这是一个类型转换问题?我不希望评论变成一个数组。我希望结果与 @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给出错误。

您可以使用<<orpush代替,也可以将评论对象包装在数组中:

@reviews << review

或者

@reviews.push review

或者

@reviews += [review]

...分别。


或者,我确信有一种更惯用的方式来做你想做的事情。

我还不确定所有 rails3 的东西,但类似:

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

这假设 Review 和 Category 之间存在关联:

在审查模型中:

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

在类别模型中:

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