尝试获取列表嵌套路由的索引时出错 Rails "unexpected tIVAR"

Error when trying get index of list nested route Rails "unexpected tIVAR"

我想获取属于某个类别的所有评论的列表。我在尝试获取 JSON 文件(这是一个 API 应用程序)中所有评论的列表时遇到错误:“/Code/Rails/videogame_reviews/app/controllers/reviews_controller.rb:6: 语法错误,意外tIVAR,期待 '(' @reviews = @category.@game.reviews ^".

有人可以解释为什么会失败吗? @reviews = Reviews.all 正在运行,但会显示所有评论。

这是 ReviewsController

def index
  @game = Game.find(params[:game_id])
  @category = Category.find(params[:category_id])
  @reviews = @category.@game.reviews
  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

@reviews = @category.@game.reviews 的语法不正确。我猜你想要某款游戏的所有评论?如果是这样,请尝试以下操作:

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

行,

@reviews = @category.@game.reviews

不会工作,因为@game 不是类别方法。 @game 是一个变量。您可以使用上述答案中的 activeRecord 查询来获取属于特定类别和游戏的所有评论。

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