ruby - Passing two query string parameter using Rails 3 -


i want pass 2 id in link_to tag using 2 id can fetch data db.but in case showing 1 id coming url in address bar therefore getting following error.

error:

activerecord::recordnotfound in paymentscontroller#download_pdf  couldn't find paymentvendor without id rails.root: c:/site/swargadwara_puri1  application trace | framework trace | full trace app/controllers/payments_controller.rb:85:in `download_pdf' 

my code file has explained below.

total_payment_result.html.erb:

<table class="table table-bordered">         <colgroup>             <col class="col-md-1 col-sm-1">             <col class="col-md-3 col-sm-3">             <col class="col-md-2 col-sm-2">             <col class="col-md-2 col-sm-2">             <col class="col-md-2 col-sm-2">             <col class="col-md-2 col-sm-2">         </colgroup>         <thead>             <tr>             <th class="text-center">sl. no</th>             <th class="text-center">date</th>             <th class="text-center">total claim</th>             <th class="text-center">paid</th>             <th class="text-center">outstanding</th>             <th class="text-center">payment advice</th>             </tr>         </thead>         <tbody>         <tr>             <td class="text-center">1</td>             <td class="text-center"><%= @add_payment.created_at %></td>             <td class="text-center"><%= @add_payment.total_claim %></td>             <td class="text-center"><i class="fa fa-rupee"></i><%= @add_payment.paid_amount %></td>             <td class="text-center"><i class="fa fa-rupee"></i><%= @outstanding %></td>             <td class="text-center">                 <div class="btn-group">                      <%= link_to "download pdf",download_pdf_path(:format => "pdf",:id1 => @add_payment.id,:id2 => @userid ),:target => "_blank" %>                 </div>                 <div class="btn-group">                     <a href="javascript:void(0)" title="" class="btn btn-xs btn-danger">                         <i class="fa fa-download"></i>                     </a>                 </div>             </td>         </tr>         </tbody>         </table> 

payments_controller.rb:

class paymentscontroller < applicationcontroller     def payment         @payment=vendor.new         @add_payment=addpayment.new         respond_to |format|             format.html              format.js         end      end     def check_type           if params[:commit]=="submit"             @vendor_type = paymentvendor.where(:v_name => params[:v_name]).map{|v|[v.v_catagory ,v.receipt_no]}             #@vendor_type = paymentvendor.where(:v_name => params[:v_name]).pluck(:v_catagory)             @output=[]             #@result=[]             @r_no=[]             @vendor_type.each |i|               if i.first == params[:payment][:s_catagory]                 @output << i[1]               end               end               @output.each |o|                 @r_no << o                 @result = paymentvendor.where(:receipt_no => @r_no,:v_catagory =>  params[:payment][:s_catagory],:v_name => params[:v_name],:v_status => "no" )             end                #puts "#{val} => #{index}"                 #puts output1[index]                #@result = paymentvendor.where(:receipt_no =>  @output[index],:v_catagory =>  params[:payment][:s_catagory],:v_name => params[:v_name] )          else             @v_name=vendor.where(:s_catagory => params[:payment][:s_catagory] ).pluck(:v_name)         end     end     def add_payment         if params[:commit]             #params[:details] == '1' ? remember : forget             @userid=params[:id]             puts "id #{@userid}"             @info=0             params[:infos].each |info|               @info=@info+info.to_i             end             @total_amount=params[:deatils]             @total=0             @count=0             @delet_id=[]             params[:deatils].each |id|                 @delet_id << id                 @amount=paymentvendor.find(id)                 @total=@total+@amount.v_amount.to_i                 @count=@count+1             end             if @total                 @outstanding= @info-@total                 if params[:add_payment][:p_catagory]=="cash"                 @add_payment=addpayment.create(:p_catagory => params[:add_payment][:p_catagory],:paid_amount => @total,:total_claim => @count )                 if @add_payment                     @delet_id.each |i|                         @del_id=paymentvendor.find(i)                         @del_id.update_attributes(:v_status => "yes")                     end                     @abc=true                 end                 end                 if params[:add_payment][:p_catagory]=="cheque"                     @add_payment=addpayment.create(:p_catagory => params[:add_payment][:p_catagory],:paid_amount => @total,:total_claim => @count,:chk_details => params[:chk_details],:chk_no => params[:chk_no] )                     if @add_payment                         @abc=true                     end                 end             end         else             if params[:add_payment][:p_catagory]=="cheque"                 @chk=true             else                 @cash=true             end         end     end     def download_pdf         @pdf_payment_result=addpayment.find(params[:id1])         @pdf_vendor_details=paymentvendor.find(params[:id2])         @pdf_address=vendor.where(:v_name => @pdf_vendor_details.v_name , :s_catagory => @pdf_vendor_details.v_catagory )         pdf = render_to_string(pdf: "test.pdf", template: "payments/download_pdf.html.erb", encoding: "utf-8", layout: 'application')         send_data pdf ,:disposition => 'inline', filename: 'something.pdf', :type => 'application/pdf'         save_path = rails.root.join('pdfs','payment.pdf')         file.open(save_path, 'wb') |file|             file << pdf         end     end end 

route.rb:

swargadwarapuri::application.routes.draw   root :to => "admins#index"   post "session/login_admin" => "sessions#login_admin"   "homes/home" => "homes#home"   "admins/index" => "admins#index"    "sessions/logout_admin" => "sessions#logout_admin"   post "homes/scan_report" => "homes#scan_report"   "reports/view_report" => "reports#view_report"   "users/create_client" => "users#create_client"   post "users/client_reg" => "users#client_reg"   "homes/user_home" => "homes#user_home"   "vendors/vendor_add" => "vendors#vendor_add"   "vendors/vendor_edit" => "vendors#vendor_edit"   "payments/payment" => "payments#payment"   "payments/view_payment" => "payments#view_payment"   post "vendors/create_vendor" => "vendors#create_vendor"   post "homes/payment" => "homes#payment"   post "vendors/update_vendor" => "vendors#update_vendor"   post "payments/check_type" => "payments#check_type"    "payments/check_type" => "payments#check_type"    post "payments/check_dropdown" => "payments#check_dropdown"    "payments/paym" => "payments#paym"    post "payments/add_payment" => "payments#add_payment"    "payments/download_pdf" => "payments#download_pdf", :as => 'download_pdf' end 

paymentdetails.html.erb:

<table class="table table-bordered">         <colgroup>             <col class="col-md-1 col-sm-1">             <col class="col-md-1 col-sm-1">             <col class="col-md-3 col-sm-3">             <col class="col-md-3 col-sm-3">             <col class="col-md-4 col-sm-4">         </colgroup>         <thead>             <tr>                 <th class="text-center"><input type="checkbox"></th>                 <th class="text-center">sl. no</th>                 <th class="text-center">date</th>                 <th class="text-center">receipt no.</th>                 <th class="text-center">amount</th>             </tr>         </thead>         <tbody>             <% @result.each |r| %>             <%= hidden_field_tag 'infos[]',r.v_amount %>             <tr>                 <th class="text-center"><%= check_box_tag "deatils[]" ,r.id,{} ,:id => r.id %></th>                 <td class="text-center"><%= r.id %></td>                 <td class="text-center"><%= r.c_date %></td>                 <td class="text-center"><%= r.receipt_no %></td>                 <td class="text-center"><i class="fa fa-rupee"></i><%= r.v_amount %></td>             </tr>             <% end %>      </tbody> </table> 

actually error showing in download_pdf method because of id2 cannot fetch.see view file passing 2 id inside link_to tag (i.e.<%= link_to "download pdf",download_pdf_path(:format => "pdf",:id1 => @add_payment.id,:id2 => @userid ),:target => "_blank" %>).when download_pdf action executing getting url i.e-http://localhost:3000/payments/download_pdf.pdf?id1=12 in other window need id1 , id2 url.please me pass these 2 id query string error can resolved.

add following routes.rb

get "payments/download_pdf/:id1/:id2" => "payments#download_pdf", :as => 'download_pdf'   def download_pdf   @pdf_payment_result=addpayment.find(params[:id1])   @pdf_vendor_details=paymentvendor.find(params[:id2])   @pdf_address=vendor.where(:v_name => @pdf_vendor_details.v_name , :s_catagory => @pdf_vendor_details.v_catagory )   pdf = render_to_string(pdf: "test.pdf", template: "payments/download_pdf.html.erb", encoding: "utf-8", layout: 'application')   file_name = "#{time.now.strftime("%d%m%y%h%m%s")}.pdf"   send_data pdf ,:disposition => 'inline', filename: file_name, :type => 'application/pdf', :page_size => 'letter'   save_path = rails.root.join('pdfs', file_name)   file.open(save_path, 'wb') |file|     file << pdf   end end 

this download_pdf create unique timestamp


Comments