首页 > 解决方案 > 在 Rails 中查找 ActiveRecord 命令不起作用

问题描述

在我的应用程序的搜索功能中,用户可以输入搜索文本并从下拉列表中选择类别(主题)。

在我的控制器的 do_search 操作中,我通过执行Subject.find(params[:subject]).courses找到课程,其中params[:subject]是每个主题的s_id(主题 ID)(“1234-123”,“ 4123-232", ...)。

运行服务器时,我尝试搜索但没有找到结果。我还在 Rails 控制台中检查了它,但也有 0 个匹配项。

这是我的控制器中 do_search 操作的代码:

def do_search
    if params[:subject].blank? && params[:search_text].blank?
      @courses = Course.all
    elsif !params[:subject].blank? && !params[:search_text].blank?
      @courses = Subject.find(params[:subject]).courses.where("UPPER(name) LIKE ?", "%#{params[:search_text].upcase}%")
    elsif !params[:subject].blank? 
      @courses = Subject.find(params[:subject]).courses
    else
      @courses = Course.where("UPPER(name) LIKE ?", "%#{params[:search_text].upcase}%")
    end
    return @courses
end

架构:课程 - 科目:多对多

科目

  • s_id(主题 ID):字符串
  • 名称:字符串

培训班

  • 代码:字符串
  • 名称:字符串

包含

  • course_id:整数(ActiveRecord 为每门课程创建的主键)
  • subject_id:整数(ActiveRecord 为每个主题创建的主键)

标签: ruby-on-railsrubyactiverecordruby-on-rails-6

解决方案


find查找记录的数据库 ID,我认为这不是您实际搜索的内容。我想你真的想做Subject.find_by(s_id: params[:subject]).courses


推荐阅读