2016-04-30 5 views
1

Я хочу получить список всех отзывов, относящихся к категории a, которая относится к категории. Я получаю сообщение об ошибке при попытке получить список всех отзывов в файле JSON (это приложение API): «/Code/Rails/videogame_reviews/app/controllers/reviews_controller.rb:6: синтаксическая ошибка, неожиданный tIVAR , ожидая '(' @reviews = @ категории. @ game.reviews ^».Ошибка при попытке получить индекс списка вложенного маршрута Rails «неожиданный tIVAR»

Может кто-нибудь объяснить, почему это не удается? @reviews = Reviews.all работает, но показывает все отзывы.

этого является ReviewsController

def index 
    @game = Game.find(params[:game_id]) 
    @category = Category.find(params[:category_id]) 
    @reviews = @[email protected] 
    respond_to do |f| 
    f.html 
    f.json { render json: { category: @category, game: @game, reviews: @reviews} } 
    end 
end 

Я сделал копию с индексом GamesController, который работает

def index 
    @category = Category.find(params[:category_id]) 
    @games = @category.games 
    respond_to do |f| 
    f.html 
    f.json { render json: { category: @category, games: @games } } 
    end 
end 

Вот Отзывы модель

class Review < ActiveRecord::Base 
    belongs_to :game 
    validates_presence_of :comment 
end 

Это модель игры

class Game < ActiveRecord::Base 
    belongs_to :category 
    has_many :reviews 
    validates_presence_of :title, :category 
end 

И это модель Категория

class Category < ActiveRecord::Base 
    validates_presence_of :name 
    has_many :games 
end 

Вот маршруты для обзоров

resources :categories do 
    resources :games do 
    resources :reviews 
    end 
end 

ответ

0

Неверный формат синтаксиса для @reviews = @[email protected]. Я предполагаю, что вам нужны все отзывы в категории для определенной игры? Если да, то попробуйте следующее:

Review.joins(games: :category).where(categories: {id: @category.id}, games: {id: @game.id}) 
+0

Это комментарий, а не ответ. – Ilya

+0

@ Илья, я не согласен. –

+0

Я пробовал свой код. Я прохожу через синтаксис, но я получаю из себя часть JSON: ** Ассоциация назвала «игры» не найдена в обзоре; возможно, вы ошиблись? ** – Samuel

0

Линия,

@reviews = @[email protected] 

не будет работать, потому что @game это не метод категории. @game - это переменная. Вы можете использовать запрос activeRecord в приведенном выше ответе, чтобы получить все отзывы, относящиеся к определенной категории и игре.

@reviews = Review.joins(games: :category).where(categories: {id: @category.id}, games: {id: @game.id}) 
+0

Спасибо за объяснение! – Samuel