Ruby on rails ActionView::Template::Error(nil:NilClass的未定义方法'strip!';)
当我插入超过100000条记录时,似乎遇到了这个错误。我知道它可以支持更多的方式。下面是相关类的错误和代码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
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 = '…')
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 %>