【问题标题】:Ruby on Rails Controller Error in Search搜索中的 Ruby on Rails 控制器错误
【发布时间】:2015-12-11 08:05:45
【问题描述】:

我从学生迁移到另一个迁移中删除了两个字段 middle_name、last_name 后,我面临以下错误。以下是错误。

StudentController#advanced_search 中的 Searchlogic::NamedScopes::OrConditions::UnknownConditionError

条件“姓氏”不是有效条件,我们找不到任何匹配的范围。

RAILS_ROOT: /root/ansipro342
Application Trace | Framework Trace | Full Trace

/root/ansipro342/vendor/plugins/searchlogic/lib/searchlogic/named_scopes/or_conditions.rb:96:in `interpolate_or_conditions'
/root/ansipro342/vendor/plugins/searchlogic/lib/searchlogic/named_scopes/or_conditions.rb:75:in `each'
/root/ansipro342/vendor/plugins/searchlogic/lib/searchlogic/named_scopes/or_conditions.rb:75:in `interpolate_or_conditions'
/root/ansipro342/vendor/plugins/searchlogic/lib/searchlogic/named_scopes/or_conditions.rb:36:in `or_conditions'
/root/ansipro342/vendor/plugins/searchlogic/lib/searchlogic/named_scopes/or_conditions.rb:19:in `or_condition?'
/root/ansipro342/vendor/plugins/searchlogic/lib/searchlogic/named_scopes/or_conditions.rb:10:in `condition?'
/root/ansipro342/vendor/plugins/searchlogic/lib/searchlogic/search/scopes.rb:10:in `scope?'
/root/ansipro342/vendor/plugins/searchlogic/lib/searchlogic/search/method_missing.rb:16:in `method_missing'
/root/ansipro342/vendor/plugins/searchlogic/lib/searchlogic/search/conditions.rb:19:in `send'
/root/ansipro342/vendor/plugins/searchlogic/lib/searchlogic/search/conditions.rb:19:in `conditions='
/root/ansipro342/vendor/plugins/searchlogic/lib/searchlogic/search/conditions.rb:15:in `each'
/root/ansipro342/vendor/plugins/searchlogic/lib/searchlogic/search/conditions.rb:15:in `conditions='
/root/ansipro342/vendor/plugins/searchlogic/lib/searchlogic/search/date_parts.rb:19:in `conditions='
/root/ansipro342/vendor/plugins/searchlogic/lib/searchlogic/search/base.rb:18:in `initialize'
/root/ansipro342/vendor/plugins/searchlogic/lib/searchlogic/search/implementation.rb:10:in `new'
/root/ansipro342/vendor/plugins/searchlogic/lib/searchlogic/search/implementation.rb:10:in `search'
/root/ansipro342/app/controllers/student_controller.rb:816:in `advanced_search'

请求

参数:

{"搜索"=>{"订单"=>"", "first_name_or_middle_name_or_last_name_or_admission_no_like"=>"Imran"}, “提交”=>“搜索”}

以下是学生控制器中存在第 816 行的代码区域

def advanced_search
    @search = Student.search(params[:search])
    unless params[:search].present?
      @batches = Batch.all
    else
      if params[:search].present?
        @students = Array.new
        if params[:advv_search].present? and params[:advv_search][:course_id].present?
          unless params[:search][:batch_id_equals].present?
            params[:search][:batch_id_in] = Batch.find_all_by_course_id(params[:advv_search][:course_id]).collect{|b|b.id}
          end
        end
        if params[:search][:is_active_equals]=="true"
          @students = Student.ascend_by_first_name.search(params[:search]).paginate(:page => params[:page],:per_page => 30)
        elsif params[:search][:is_active_equals]=="false"
          @students = ArchivedStudent.ascend_by_first_name.search(params[:search]).paginate(:page => params[:page],:per_page => 30)
        else
          @students = [{:student => {:search_options => params[:search], :order => :first_name}},{:archived_student => {:search_options => params[:search], :order => :first_name}}].model_paginate(:page => params[:page],:per_page => 30)#.sort!{|m, n| m.first_name.capitalize <=> n.first_name.capitalize}
        end
        @searched_for = ''
        @searched_for += "<span>#{t('name')}/#{t('admission_no')}: " + params[:search][:first_name_or_admission_no_like].to_s + "</span>" if params[:search][:first_name_or_admission_no_like].present?
        @searched_for += "<span>#{t('name')}: " + params[:search][:first_name_like].to_s + "</span>" if params[:search][:first_name_like].present?
        @searched_for += " <span>#{t('admission_no')}: " + params[:search][:admission_no_equals].to_s + "</span>" if params[:search][:admission_no_equals].present?
        if params[:advv_search].present? and params[:advv_search][:course_id].present?
          course = Course.find(params[:advv_search][:course_id])
          batch = Batch.find(params[:search][:batch_id_equals]) unless (params[:search][:batch_id_equals]).blank?
          @searched_for += "<span>#{t('course_text')}: " + course.full_name + "</span>"
          @searched_for += "<span>#{t('batch')}: " + batch.full_name + "</span>" if batch.present?
        end

请帮助我不知道 last_name 存在于哪里,它显示错误,我对 ruby​​ on rails 很陌生,很需要这个。

提前致谢。

【问题讨论】:

  • 您可以在终端中尝试rake db:setup,我认为这会对您有所帮助。据我所知,这是您的迁移和数据库不匹配问题。
  • 感谢您的回复,它给了我以下错误。耙中止!当你没想到时,你有一个 nil 对象!您可能期望 ActiveRecord::Base 的实例。评估 nil.update_attributes 时发生错误
  • 将 Pry gem 'gem pry-rails' 安装到您的应用程序中。在第 816 行之前添加“binding.pry”并逐步执行代码。这将使您能够访问所有变量,例如自己调用方法。

标签: ruby-on-rails searchlogic


【解决方案1】:

感谢回复,问题已解决。

问题出在索引迁移中,实际上我从创建迁移中删除了列,但它已经存在于索引迁移中。

【讨论】:

    【解决方案2】:

    老兄,代码很庞大,不太可能有人通过阅读一次就能理解它。 安装 rubocop 或其他一些 lint 工具并清理混乱。

    【讨论】:

    • 谢谢亲爱的,但我现在正在学习 ruby​​ on rails 并且还不知道这些东西。
    • 好吧,我猜你是来学习的.. Gem install rubocop.. 然后 $ rubocop -R --format simple.. 这会告诉你所有 Ruby lint 问题.. 你可能想忽略文档和行长(次要到 99),或者您可以搜索跳过这些的配置文件..
    • 此外,您不能只是在这里复制粘贴您的代码并期望人们阅读所有内容...我的意思是有人会这样做,但如果是的话,更有可能会有更多人阅读它干净易读
    猜你喜欢
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 2010-11-05
    • 2017-12-01
    • 1970-01-01
    • 2011-05-29
    • 1970-01-01
    • 2012-07-21
    相关资源
    最近更新 更多