Ruby on rails ActionView::Template::Error(nil:NilClass的未定义方法'strip!';)

Ruby on rails ActionView::Template::Error(nil:NilClass的未定义方法'strip!';),ruby-on-rails,ruby,Ruby On Rails,Ruby,当我插入超过100000条记录时,似乎遇到了这个错误。我知道它可以支持更多的方式。下面是相关类的错误和代码 2015-07-01 08:14:24.512:INFO:/:Started GET "/search?type=digital_object" for 129.118.15.44 at 2015-07-01 08:14:24 -0500| 2015-07-01 08:14:24.512:INFO:/:Processing by SearchController#search as HTM

当我插入超过100000条记录时,似乎遇到了这个错误。我知道它可以支持更多的方式。下面是相关类的错误和代码

2015-07-01 08:14:24.512:INFO:/:Started GET "/search?type=digital_object" for 129.118.15.44 at 2015-07-01 08:14:24 -0500|
2015-07-01 08:14:24.512:INFO:/:Processing by SearchController#search as HTML|
2015-07-01 08:14:24.512:INFO:/:  Parameters: {"type"=>"digital_object"}|
Jul 01, 2015 8:14:24 AM org.apache.solr.core.SolrCore execute
INFO: [collection1] webapp= path=/select params={facet=true&sort=title_sort+asc&facet.limit=100&qf=four_part_id^3+title^2+finding_aid_filing_title^2+fullrecord&wt=json&rows=10&defType=edismax&pf=four_part_id^4&start=0&q=*:*&facet.field=repository&facet.field=primary_type&facet.field=subjects&facet.field=source&facet.field=linked_agent_roles&fq=types:("digital_object")&fq=-exclude_by_default:true&fq=publish:true} hits=203799 status=0 QTime=15 
2015-07-01 08:14:24.590:INFO:/:  Rendered G:/archivesspace/plugins/vva/public/views/search/_components_switch.html.erb (15.0ms)|
2015-07-01 08:14:24.590:INFO:/:  Rendered search/_filter.html.erb (0.0ms)|
2015-07-01 08:14:24.606:INFO:/:  Rendered search/_pagination_summary.html.erb (16.0ms)|
2015-07-01 08:14:24.637:INFO:/:  Rendered search/_inline_results.html.erb (47.0ms)|
2015-07-01 08:14:24.637:INFO:/:  Rendered search/results.html.erb within layouts/application (62.0ms)|
2015-07-01 08:14:24.653:INFO:/:Completed 500 Internal Server Error in 141.0ms|
2015-07-01 08:14:24.653:INFO:/:|ActionView::Template::Error (undefined method `strip!' for nil:NilClass):|    
17:           <% elsif result["primary_type"] === "repository" %>|    
18:             <%= link_to result['title'], :controller => :search, :action => :repository, :repo_id => id %>|    
19:           <% else %>|    
20:             <%= link_to title_or_finding_aid_filing_title( result )  , :controller => :records, :action => result["primary_type"], :id => id, :repo_id => repo_id %>|    
21:           <% end %>|    
22:         </h3>|    
23:         <div class="result-summary">|  app/helpers/application_helper.rb:22:in `title_or_finding_aid_filing_title'|  
app/views/search/_inline_results.html.erb:20:in `_app_views_search__inline_results_html_erb___996910774_15116'| 
app/views/search/_inline_results.html.erb:5:in `_app_views_search__inline_results_html_erb___996910774_15116'|  
app/helpers/application_helper.rb:134:in `render_aspace_partial'|  
app/views/search/results.html.erb:13:in `_app_views_search_results_html_erb__332589766_15048'|  
app/controllers/search_controller.rb:21:in `search'|  
app/controllers/search_controller.rb:20:in `search'|||
2015-07-01 08:14:24.512:INFO:/:Started GET”/search?type=digital_object,2015-07-01 08:14:24-0500的129.118.15.44|
2015-07-01 08:14:24.512:信息:/:SearchController处理#以HTML形式搜索|
2015-07-01 08:14:24.512:信息:/:参数:{“类型”=>“数字对象”}|
2015年7月1日上午8:14:24 org.apache.solr.core.SolrCore执行
信息:[collection1]webapp=path=/select参数={facet=true&sort=title\u sort+asc&facet.limit=100&qf=four\u part\u id^3+title^2+fullrecord&wt=json&rows=10&defType=edismax&pf=four\u part\u id^4&start=0&q=*:*&facet.field=repository&facet.field=primary\u type&facet.field=subjects&facet=subjects&facet.field=source&facet.field=source&facet.field=linked&facet=agent&fq=tys:&fq=type:(“数字对象”)&fq=-exclude_by_默认值:true&fq=publish:true}点击次数=203799状态=0 QTime=15
2015-07-01 08:14:24.590:信息:/:呈现G:/archivespace/plugins/vva/public/views/search/_components\u switch.html.erb(15.0ms)|
2015-07-01 08:14:24.590:信息:/:呈现搜索/_filter.html.erb(0.0ms)|
2015-07-01 08:14:24.606:信息:/:呈现搜索/_分页_summary.html.erb(16.0ms)|
2015-07-01 08:14:24.637:信息:/:呈现搜索/_inline_results.html.erb(47.0ms)|
2015-07-01 08:14:24.637:信息:/:布局/应用程序中呈现的搜索/results.html.erb(62.0ms)|
2015-07-01 08:14:24.653:信息:/:在141.0毫秒内完成500个内部服务器错误|
2015-07-01 08:14:24.653:信息:/:| ActionView::Template::Error(未定义nil:NilClass的'strip!'方法):|
17:           |    
18::搜索,:操作=>:存储库,:repo_id=>id%>|
19:           |    
20::记录,:action=>result[“primary_type”],:id=>id,:repo_id=>repo_id%>
21:           |    
22:         |    
23:| app/helpers/application_helper.rb:22:|标题|或|查找|帮助|归档|标题|
app/views/search/_inline_results.html.erb:20:in`_app_views_search_inline_results_html_erb_996910774_15116'|
app/views/search/_inline_results.html.erb:5:in`_app_views_search_inline_results_html_erb_996910774_15116'|
app/helpers/application_helper.rb:134:in'render_aspace_partial'|
app/views/search/results.html.erb:13:in`_app_views_search_results_html_erb_332589766_15048'|
app/controllers/search_controller.rb:21:in'search'|
app/controllers/search_controller.rb:20:in'search'|||
_inline_results.html.erb

<div class="search-results">
<% if search_data.results? %>
  <%= render_aspace_partial :partial => "search/pagination_summary", :locals => {:search_data => search_data} %>
  <ul class="results-list">
    <% search_data['results'].each do |result| %>
      <%
         id = JSONModel(result["primary_type"]).id_for(result['uri'])
         repo_id = JSONModel(:repository).id_for(JSONModel.repository_for(result['uri']),{}, true)
      %>
      <li class="result">
        <h3>
          <%= icon_for result["primary_type"] %>
          <% if result["primary_type"] === "subject" %>
            <%= link_to result["title"], {"filter_term" => search_data.facet_query_string("subjects", result["title"])} %>
          <% elsif ["agent_person", "agent_software", "agent_family", "agent_corporate_entity"].include?(result["primary_type"]) %>
            <%= link_to result['title'], :controller => :records, :action => :agent, :id => id, :agent_type => result["primary_type"] %>
          <% elsif result["primary_type"] === "repository" %>
            <%= link_to result['title'], :controller => :search, :action => :repository, :repo_id => id %>
          <% else %>
            <%= link_to title_or_finding_aid_filing_title( result )  , :controller => :records, :action => result["primary_type"], :id => id, :repo_id => repo_id %>
          <% end %>
        </h3>
        <div class="result-summary">
          <%= render_aspace_partial :partial => "search/result_summary_#{result["primary_type"]}", :locals => {:obj => result} %>
        </div>
      </li>
    <% end %>
  </ul>
  <%= render_aspace_partial :partial => "search/pagination", :locals => {:search_data => search_data} %>
<% else %>
  <p class="alert alert-info">
    <%= I18n.t("search_results.no_results") %></em>.
  </p>
<% end %>
</div>

“搜索/分页\u摘要”,:局部变量=>{:搜索\u数据=>搜索\u数据}%>
  • 搜索\u数据.facet\u查询\u字符串(“主题”,结果[“标题])}%> :records,:action=>:agent,:id=>id,:agent\u type=>result[“primary\u type”]%> :search,:action=>:repo\u id=>id%> :records,:action=>result[“primary_type”],:id=>id,:repo_id=>repo_id%> “搜索/结果汇总”{result[“primary_type”]},:locals=>{:obj=>result}%>
“搜索/分页”,:locals=>{:search_data=>search_data}%>

.

搜索\u controller.rb

require 'advanced_query_builder'

class SearchController < ApplicationController

  DETAIL_TYPES = ['accession', 'resource', 'archival_object', 'digital_object',
                  'digital_object_component', 'classification',
                  'agent_person', 'agent_family', 'agent_software', 'agent_corporate_entity']

  VIEWABLE_TYPES = ['agent', 'repository', 'subject'] + DETAIL_TYPES

  FACETS = ["repository", "primary_type", "subjects", "source", "linked_agent_roles"]


  def search
    set_search_criteria

    @search_data = Search.all(@criteria, @repositories)
    @term_map = params[:term_map] ? ASUtils.json_parse(params[:term_map]) : {}

    respond_to do |format|
      format.html { render "search/results" }
      format.js { render_aspace_partial :partial => "search/inline_results", :content_type => "text/html", :locals => {:search_data => @search_data} }
    end
  end

  def advanced_search
    set_advanced_search_criteria

    @search_data = Search.all(@criteria, @repositories)

    render "search/results"
  end

  def repository
    set_search_criteria

    if params[:repo_id].blank?
      @search_data = Search.all(@criteria.merge({"facet[]" => [], "type[]" => ["repository"]}), {})

      return render "search/results"
    end

    @repository = @repositories.select{|repo| JSONModel(:repository).id_for(repo.uri).to_s === params[:repo_id]}.first

    @breadcrumbs = [
      [@repository['repo_code'], url_for(:controller => :search, :action => :repository, :id => @repository.id), "repository"]
    ]

    @search_data = Search.repo(@repository.id, @criteria, @repositories)

    render "search/results"
  end


  private

  def set_search_criteria
    @criteria = params.select{|k,v|
      ["page", "q", "type", "sort",
       "filter_term", "root_record", "format"].include?(k) and not v.blank?
    }

    @criteria["page"] ||= 1
    @criteria["sort"] = "title_sort asc" unless @criteria["sort"] or @criteria["q"] or params["advanced"].present?

    if @criteria["filter_term"]
      @criteria["filter_term[]"] = Array(@criteria["filter_term"]).reject{|v| v.blank?}
      @criteria.delete("filter_term")
    end

    if params[:type].blank?
      @criteria['type[]'] = DETAIL_TYPES
    else
      @criteria['type[]'] = Array(params[:type]).keep_if {|t| VIEWABLE_TYPES.include?(t)}
      @criteria.delete("type")
    end

    @criteria['exclude[]'] = params[:exclude] if not params[:exclude].blank?
    @criteria['facet[]'] = FACETS
  end


  def set_advanced_search_criteria
    set_search_criteria

    terms = (0..2).collect{|i|
      term = search_term(i)

      if term and term["op"] === "NOT"
        term["op"] = "AND"
        term["negated"] = true
      end

      term
    }.compact

    if not terms.empty?
      @criteria["aq"] = AdvancedQueryBuilder.new(terms, :public).build_query.to_json
      @criteria['facet[]'] = FACETS
    end
  end

  def search_term(i)
    if not params["v#{i}"].blank?
      { "field" => params["f#{i}"], "value" => params["v#{i}"], "op" => params["op#{i}"], "type" => "text" }
    end
  end

end
需要“高级查询生成器”
类SearchController<应用程序控制器
详细信息类型=[“登录”、“资源”、“存档对象”、“数字对象”,
“数字对象组件”、“分类”,
“代理个人”、“代理家庭”、“代理软件”、“代理公司实体”]
可视_类型=['agent'、'repository'、'subject']+详细_类型
FACETS=[“存储库”、“主要类型”、“主题”、“源”、“链接的代理角色”]
def搜索
设置搜索条件
@search\u data=search.all(@criteria,@repositories)
@术语映射=参数[:术语映射]?json_parse(params[:term_map]):{}
回应待办事项|格式|
format.html{呈现“搜索/结果”}
format.js{render_aspace_partial:partial=>“搜索/内联搜索结果”,:content_type=>“text/html”,:locals=>{:search_data=>@search_data}
结束
结束
高级搜索
设置高级搜索条件
@search\u data=search.all(@criteria,@repositories)
呈现“搜索/结果”
结束
def存储库
设置搜索条件
如果参数[:repo_id]。为空?
@search_data=search.all(@criteria.merge({“facet[]”=>[],“type[]”=>[“repository”]}),{})
返回渲染“搜索/结果”
结束
@repository=@repositories.选择{repo | JSONModel(:repository).id_for(repo.uri).to_s===params[:repo_id]}。首先
@面包屑=[
[@repository['repo_code'],url_for(:controller=>:search,:action=>:repository,:id=>@repository.id),“repository”]
]
@search\u data=search.repo(@repository.id、@criteria、@repositories)
呈现“搜索/结果”
结束
私有的
def设置搜索条件
@条件=参数。选择{k,v|
[“页面”、“q”、“类型”、“排序”,
“筛选项”、“根记录”、“格式”]。包括?(k)而不是v。空白?
}
@标准[“页面”]| |=1
@除非@criteria[“sort”]或@criteria[“q”]或params[“advanced”],否则criteria[“sort”]=“title\u sort asc”。是否存在?
如果@criteria[“filter_term”]
@条件[“筛选项[]”]=数组(@criteria[“筛选项”])。拒绝{v | v.blank?}
@标准。删除(“筛选条件”)
结束
如果参数[:type]。为空?
@标准['type[]']=详细信息类型
其他的
@条件['type[]']=Array(params[:type])。如果{t |可查看_类型,则保留_。包括?(t)}
@标准。删除(“类型”)
结束
@条件['exclude[]]=params[:exclude]如果不是params[:exclude]。是否为空?
@标准['facet[]']=FACETS
结束
def设置高级搜索条件
设置搜索条件
术语=(0..2).收集{i|
T
module ApplicationHelper

  def include_theme_css
    css = ""
    css += stylesheet_link_tag("themes/#{ArchivesSpacePublic::Application.config.public_theme}/bootstrap", :media => "all")
    css += stylesheet_link_tag("themes/#{ArchivesSpacePublic::Application.config.public_theme}/application", :media => "all")
    css.html_safe
  end

  def set_title(title)
    @title = title
  end

  def title_or_finding_aid_filing_title(resource)
    if resource["finding_aid_filing_title"] && !resource["finding_aid_filing_title"].nil? && resource["finding_aid_filing_title"].length > 0
      title = resource["finding_aid_filing_title"]
    elsif resource["title"] && !resource["title"].nil?
      title = resource["title"]
    else
      title = resource["display_string"]
    end
    MixedContentParser::parse(title, url_for(:root))


  end

  def icon_for(type)
    "<span class='icon-#{type}' title='#{I18n.t("#{type}._singular")}'></span>".html_safe
  end

  def label_and_value(label, value)
    return if value.blank?

    label = content_tag(:dt, label)
    value = content_tag(:dd, value)

    label + value
  end

  def i18n_enum(jsonmodel_type, property, value)
    return if value.blank?

    property_defn = JSONModel(jsonmodel_type).schema["properties"][property]

    return if property_defn.nil?

    if property_defn.has_key? "dynamic_enum"
      enum_key = property_defn["dynamic_enum"]
      #return "enumerations.#{enum_key}.#{value}"
      I18n.t("enumerations.#{enum_key}.#{value}", :default => value)
    else
      I18n.t("#{jsonmodel_type}.#{property}_#{value}", :default => value) 
    end
  end

  def params_for_search(opts = {})
    search_params = {
      :controller => :search,
      :action => :search
    }

    search_params["filter_term"] = Array(opts["filter_term"] || params["filter_term"]).clone
    search_params["filter_term"].concat(Array(opts["add_filter_term"])) if opts["add_filter_term"]
    search_params["filter_term"] = search_params["filter_term"].reject{|f| Array(opts["remove_filter_term"]).include?(f)} if opts["remove_filter_term"]

    search_params["sort"] = opts["sort"] || params["sort"]

    search_params["q"] = opts["q"] || params["q"]

    search_params["format"] = params["format"]
    search_params["root_record"] = params["root_record"]
    search_params["agent_type"] = params["agent_type"]

    search_params["page"] = opts["page"] || params["page"] || 1

    if opts["type"] && opts["type"].kind_of?(Array)
      search_params["type"] = opts["type"]
    else
      search_params["type"] = opts["type"] || params["type"]
    end

    search_params["term_map"] = params["term_map"]

    # retain any advanced search params
    advanced = (opts["advanced"] || params["advanced"])
    search_params["advanced"] = advanced.blank? || advanced === 'false' ? false : true
    search_params[:action] = :advanced_search if search_params["advanced"]

    (0..2).each do |i|
      search_params["v#{i}"] = params["v#{i}"]
      search_params["f#{i}"] = params["f#{i}"]
      search_params["op#{i}"] = params["op#{i}"]
    end

    search_params.reject{|k,v| k.blank? or v.blank?}
  end

  def set_title_for_search
    title =  I18n.t("actions.search")

    if @search_data
      if params[:type] && !@search_data.types.blank?
        title = "#{I18n.t("search_results.searching")} #{@search_data.types.join(", ")}"
      end

      facets_to_display = []

      if @search_data.query?
        facets_to_display << @search_data.facet_label_for_query
      end

      if @search_data.filtered_terms?
        facets_to_display << @search_data[:criteria]["filter_term[]"].collect{|filter_term| @search_data.facet_label_for_filter(filter_term)}
      end

      if facets_to_display.length > 0
        title += " | #{facets_to_display.join(", ")}"
      end
    end

    set_title(title)
  end

  def truncate(string, length = 50, trailing = '&hellip;')
    return string if string.length < length

    "#{string[0..50]}#{trailing}".html_safe
  end


  # See: ApplicationController#render_aspace_partial
  def render_aspace_partial(args)
    defaults = {:formats => [:html], :handlers => [:erb]}
    return render(defaults.merge(args))
  end

  def proxy_localhost?
    AppConfig[:frontend_proxy_url] =~ /localhost/
  end

end
<% elsif result["primary_type"] === "repository" %>
        <%= link_to result['title'], :controller => :search, :action => :repository, :repo_id => id %>
<% elsif result["primary_type"] === "repository" %>
  <% if !result['title'].blank? %>        
    <%= link_to result['title'], :controller => :search, :action => :repository, :repo_id => id %>
  <% end %>