【问题标题】:Error when trying get index of list nested route Rails "unexpected tIVAR"尝试获取列表嵌套路由 Rails“意外 tIVAR”的索引时出错
【发布时间】:2016-04-30 09:53:13
【问题描述】:

我想获取属于某个类别的所有评论的列表。尝试获取 JSON 文件(它是一个 API 应用程序)中所有评论的列表时出现错误:“/Code/Rails/videogame_reviews/app/controllers/reviews_controller.rb:6: syntax error, unexpected 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

【问题讨论】:

    标签: ruby-on-rails json controller nested-routes


    【解决方案1】:

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

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

    【讨论】:

    • 这是评论而不是回答。
    • 我试过你的代码。我浏览了语法,但在 JSON 部分出现错误:在评论中找不到名为“游戏”的关联;也许你拼错了?
    • 对不起,应该是单数:Review.joins(game: :category).where(categories: {id: @category.id}, games: {id: @game.id})
    • @Ilya 你是对我的帖子投反对票的人吗?想解释一下原因吗?
    • @AnthonyE,你在说什么?我刚刚在第一次编辑中否决了这个端口,因为它不包含解决它的解决方案,只注意不正确的语法。然后,大约 1 小时前,自从您编辑了答案后,我就没有按下投票按钮。
    【解决方案2】:

    线,

    @reviews = @category.@game.reviews
    

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

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

    【讨论】:

    • 感谢您的解释!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多