You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ruby Rails MoviesController#index出现NoMethodError:电影分类排序问题

修复电影列表分类筛选的NoMethodError问题

看起来你这段代码里有两个关键问题导致了NoMethodError,咱们一步步来修复:

1. 排序语法错误

你写的:

@movies = Movie.where(:category_id => @category_id).("created_at DESC")

这里的.(...)是完全错误的语法,Rails中查询排序需要用order方法。可以改成两种更规范的写法之一:

# 字符串形式
@movies = Movie.where(category_id: @category_id).order("created_at DESC")
# 更符合Rails风格的哈希形式
@movies = Movie.where(category_id: @category_id).order(created_at: :desc)

2. 处理分类不存在的边界情况

当params[:category]传入的分类名称在数据库中不存在时,Category.find_by(name: params[:category])会返回nil,这时候调用.id就会触发NoMethodError(因为NilClass没有id方法)。咱们可以加个判断来避免这种情况:

if params[:category].present?
  category = Category.find_by(name: params[:category])
  if category.present?
    # 利用关联查询更简洁
    @movies = category.movies.order(created_at: :desc)
  else
    # 分类不存在时的处理,比如返回所有电影
    @movies = Movie.order(created_at: :desc)
  end
else
  # 没有传入分类参数时,返回所有电影
  @movies = Movie.order(created_at: :desc)
end

这样调整之后,既修复了语法错误,又处理了分类不存在的异常情况,应该就能解决你遇到的NoMethodError了。

内容的提问来源于stack exchange,提问作者SapphireJones

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:22:24