Pandem1c
Pandem1c

Reputation: 878

How to insert into RAILS db via external RESTful call

SOLVED: I had done a few things wrong, all of which involved my controller RECEIVING the data. There was not anything wrong with the methods below on SENDING the data.

1: I was not using @report.save in my reportController#create

2: I was not passing params[:report] in my controller

3: I added "skip_before_filter :verify_authenticity_token" to my applicaiton controller to stop warnings in the logs. Solved. data insertion successful.

=====ORIG. Question Below=====

I need an external program to issue a command that inserts stuff into a Ruby on Rails database. I understand the security implications of this, but because this application is not public facing, it is not really an issue.

This is the workflow i am looking to achieve:

REST client > RAILS > create new DB TABLE row

For purposes of example: my route.rb file contains

resources :reports

so i am able to CRUD using those routes. I just cant seem to get my rest client to work correctly.

UPDATE: I have tried a RUBY rest client AND curl command in ONE, to no avail.

require 'rest_client'
require 'json'

hash_to_send = {:test_name => 'Fake Name', :pass_fail => 'pass',:run_id => 1111, :category => 'Fake Category'}

#formulate CURL attempt
myCommand =  "curl -H 'Content-Type: application/json' -X POST   http://localhost:8889/report.json -d #{hash_to_send.to_json} > deleteme.html"
#execute CURL attempt
`#{myCommand}` # RESULT--> 795: unexpected token at 'test_name:Fake Name'


#Make Ruby rest client attempt
response = RestClient.post( "http://localhost:8889/report.json", 
  hash_to_send.to_json, 
  :content_type => :json, :accept => :json
)

#debug info 
puts myCommand # Returns --> {"test_name":"Fake Name","pass_fail":"pass","run_id":1111,"category":"Fake Category"}

Upvotes: 0

Views: 859

Answers (1)

Lukas Stejskal
Lukas Stejskal

Reputation: 2562

Instead of curl in command-line, use ruby script and handle REST calls and JSON conversion by gems. For example, using rest-client gem (https://github.com/archiloque/rest-client) and standard json gem you can write:

require 'rest_client'
require 'json'

response = RestClient.post( "http://localhost:8889/report.json", 
  params_in_hash.to_json, 
  { :content_type => :json, :accept => :json }
)

Upvotes: 1

Related Questions