In this article i am going to explain work around/fix for "wrong status line: "" issue while you are doing any activeresource stuff in rails.
What is the problem,why "wrong status line: "" while making resource calls on "post" verb?
Here is my code snippet where is the line making the problem.
Problem on line no 8
response = post("do_bulk_insert",{cash_receipts: cash_receipts_objects.to_json})
The above line does not make a resource call to other engine. This line complaining that "URI is too long".
Now there is a question on your mind, what other options available to send large data on post call while activeresource. The answer is below
Proper Syntax for post call is
post(your_custom_method_name,options = {},body='')
so what mistake i did was, i passed all varibables inside the options which is passed as query parameter.
response = post("do_bulk_insert",{cash_receipts: cash_receipts_objects.to_json}) (Wrong Approach)
after modification the code should like this
Either
response = post("do_bulk_insert",{},{cash_receipts: cash_receipts_objects}.to_json) (Right Approach)
or
response = post("do_bulk_insert",nil,{cash_receipts: cash_receipts_objects}.to_json)
(Right Approach).
Hopefully now you can understand how post custom method calls on ActiveResource working and what common mistakes we do on that.
Thanks for reading this article.Hope it will be useful.
What is the problem,why "wrong status line: "" while making resource calls on "post" verb?
Here is my code snippet where is the line making the problem.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | class FactoringCashReceipt < ActiveResource::Base self.site = configatron.cync.factoring.url self.element_name = "cash_receipts" #self.prefix = "/borrowers/:borrower_id/" self.headers['X-BACK-KEY'] = BACKGROUND_SECRET_KEY def self.create_bulk_cash_receipts(batch,cash_receipts_objects) response = post("do_bulk_insert",{cash_receipts: cash_receipts_objects.to_json}) end #def self.by_borrower(borrower_id) # borrower_receivables = get("get_all_customers_by_borrower", {borrower_id: borrower_id}) #end # #def self.by_invoice_no_lookup(lookup_no) # customers = get("get_all_customers_by_borrower", {borrower_id: borrower_id}) #end # #def self.by_borrower_with_lookup(borrower_id,lookup_no) # #end # #def self.by_borrower_with_customer_with_lookup(borrower_id,customer_id,lookup_no) # receivable = find(:all, from: :get_particular_receivable, params: {borrower_id: borrower_id,customer_id: customer_id,receivable_no: lookup_no}) #end # #def self.get_corresponding_receivables(params) # receivables = find(:all, from: :get_corresponding_receivables, params: {borrower_id: params[:borrower_id],customer_id: params[:customer_id],receivable_no: params[:receivable_no]}) #end end |
Problem on line no 8
response = post("do_bulk_insert",{cash_receipts: cash_receipts_objects.to_json})
The above line does not make a resource call to other engine. This line complaining that "URI is too long".
Now there is a question on your mind, what other options available to send large data on post call while activeresource. The answer is below
Proper Syntax for post call is
post(your_custom_method_name,options = {},body='')
so what mistake i did was, i passed all varibables inside the options which is passed as query parameter.
response = post("do_bulk_insert",{cash_receipts: cash_receipts_objects.to_json}) (Wrong Approach)
after modification the code should like this
Either
response = post("do_bulk_insert",{},{cash_receipts: cash_receipts_objects}.to_json) (Right Approach)
or
response = post("do_bulk_insert",nil,{cash_receipts: cash_receipts_objects}.to_json)
(Right Approach).
Hopefully now you can understand how post custom method calls on ActiveResource working and what common mistakes we do on that.
Thanks for reading this article.Hope it will be useful.
No comments :
Post a Comment