Ограниченный многотабличный запрос Ruby on Rails 3 и набор типов - PullRequest
0 голосов
/ 26 января 2011

Я пытаюсь показать только 5 отзывов из определенной категории, а не 5 отзывов из любой категории.Позже я разместил сообщение, которое работало для целей сравнения.

У обзоров есть индекс идентификатора категории, который я затем использую, чтобы найти название категории и сравнить это имя с названием категории отзывов, которые я хочу.Затем я сохраняю 5 отзывов, которые я извлекаю в массив (это самый эффективный способ?).Обзоры и категории - две отдельные таблицы.

В настоящее время я получаю сообщение об ошибке «невозможно преобразовать Review в Array».Я предполагаю, что это проблема с типизацией?Я не хочу, чтобы обзор стал массивом.Я хочу, чтобы результат был эквивалентен старому коду, где @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

Спасибо за вашу помощь!

1 Ответ

1 голос
/ 26 января 2011

Происходит следующее: 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)

Это предполагает связь между Review и Category:

В модели Review:

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

В модели категории:

class Category < ActiveRecord::Base
  ...
  has_many :reviews
  ...
end
...