Я пробовал предлагать разные варианты в разных билетах, но у меня ничего не получалось, и я получал эту ошибку
AbstractController::DoubleRenderError
(Рендеринг и / или перенаправление вызывались несколько раз в этом действии. Обратите внимание, что вы можете вызывать только перенаправление рендеринга ИЛИ и не более одного раза для каждого действия. Также обратите внимание, что ни перенаправление, ни рендеринг не прекращают выполнение действия , так что если вы хотите выйти из действия после перенаправления, вам нужно сделать что-то вроде «redirect_to (...) and return».)
Подскажите, пожалуйста, что не так в этом коде,
def show
es = @external_search
if es.search_type == 'internal' && ['json','xml'].include?(params[:format])
rs = @external_search.resume_search
smws = rs.connection.daxtra_smws
dax_xml_resp = RestClient.post(smws.hostaddress__c + 'ws/dispatch',es.request_input,{:content_type => 'text/xml', :accept => 'application/xml', :timeout=> 90})
cIds = []
cHash = Hash.new
results = []
search_results = process_results(dax_xml_resp)
cIds = cIds.concat(search_results[:candidate_ids]).uniq
cHash = cHash.merge(search_results[:hash])
results = results.concat(search_results[:results]).uniq unless search_results[:results].nil?
if(!es.match_vacancy_id.blank?)
match_results = search_results
end
#if !es.match_vacancy_id.nil?
#match_results = process_results(es.daxtra_match_vacancy[:response].body) rescue nil
#unless match_results.nil?
#cIds = cIds.concat(match_results[:candidate_ids]).uniq
#cHash = cHash.merge(match_results[:hash])
#results = results.concat(match_results[:results]).uniq unless match_results[:results].nil?
#end
#end
resume_results = []
fields_needed = []
if !es.fields_to_select.blank?
fields_needed = ['Id','TR1__External_Candidate_Id__c']
fields_needed.push(es.fields_to_select.to_s.split(','))
end
unless results.nil?
tr_contacts = []
cIds.in_groups_of(1000){|group|
processed_group = group.compact.reject(&:blank?)
#tr_contacts += rs.connection.soap(rs.session_id).find_where('Contact', TR1__External_Candidate_Id__c: processed_group, ["Id", "FirstName", "CreatedBy"]).records
if !fields_needed.blank?
tr_contacts += rs.connection.soap(rs.session_id).find_where('Contact', {'TR1__External_Candidate_Id__c' => processed_group} , fields_needed.uniq)
else
tr_contacts += rs.connection.soap(rs.session_id).find_where('Contact', {'TR1__External_Candidate_Id__c' => processed_group})
end
}
tr_contacts.each {|x|
cHash[x.TR1__External_Candidate_Id__c]["Result"]["Score"] = "#{cHash[x.TR1__External_Candidate_Id__c]["Result"]["Score"].to_i.round}%"
cHash[x.TR1__External_Candidate_Id__c]["Result"]["badges"] = [{:name => 'match', :text_color => 'blue', :color => 'grey'}] if !match_results.nil? && match_results[:candidate_ids].include?(x.TR1__External_Candidate_Id__c)
resume_result = Hash["tr-object" => x.to_hash, "match-attributes" => cHash[x.TR1__External_Candidate_Id__c]["Result"].merge({"daxtra" => cHash[x.TR1__External_Candidate_Id__c]["Result"]})]
resume_results << resume_result
}
end
if resume_results.blank?
es.status_line1 = "<strong>#{es.name}</strong>"
es.retry = 0
es.result_count = 0
else
es.status_line1 = "<strong title='#{resume_results.size} Result(s)'>#{es.name}</strong>"
es.result_count = resume_results.size
es.retry = 0
end
es.status_line2 = "<div title='[Ref:#{es.id}] #{es.message}'>Status: <strong>Ready</strong></div>"
#h = Hash["a" => 100, "contact-array" => ca]
response_hash = {:ResumeSearch=>{:Status=>{:Code=>"100", :Description=>"OK"}, :data=>{:result=> resume_results}}}
#rs.connection.soap(rs.session_id).update('TR1__ResumeSearch__c', Id: rs.id, TR1__result_url__c: request.fullpath) #TakingTooMuchTime
respond_to do |format|
format.html { render :text => parsed_xml }
#format.html { render :text => h.to_json }
format.xml {
store_return_to
render :xml => parsed_xml
}
format.json {
store_return_to
render json: response_hash.to_json
}
end
end
if es.search_type == 'external' && ['json','xml'].include?(params[:format])
url = "https://#{es.host}/jwb/dispatch?db=#{es.database}&handle=#{es.request_id}&action=search_results"
ext_search = RestClient.get(url, :timeout => REST_TIMEOUT)
response = JSON.parse(ext_search)
plain = Base64.decode64(response['results'])
dresjson = Hash.from_xml(plain)
json_out = dresjson.to_json
if JSON.parse(json_out)['ZZ']['cv_entry'].class == Hash
new_json = car = {:ZZ => {:cv_entry => [JSON.parse(json_out)['ZZ']['cv_entry']]} }
json_out = new_json.to_json
end
result_count = JSON.parse(json_out)['ZZ']['cv_entry'].size unless json_out.blank? #rescue nil
es.status_line2 = "<div title='#{es.message}'>Status: <strong>Ready</strong></div>"
if !result_count.nil?
es.status_line1 = "<strong title='#{es.name} - #{result_count} Result(s)'>#{es.name}</strong>"
es.result_count = result_count
end
es.status_line2 = "<div title='[Ref:#{es.id}] #{es.message}'>Status: <strong>Ready</strong></div>"
respond_to do |format|
#format.html { render :text => response }
#format.html { render :text => tr_contacts }
format.xml { render :xml => plain }
format.json { render json: json_out }
end
end
es.save
es.to_intercom
end