Question

I am looking at using ActiveResource but is now facing a problem that I am unable to figure out myself (was searching the net for a couple of days for the solution by now).

So I have an authentication app sitting at http://localhost:80 and a client on port :85

In my auth app

I have a User model with its controller which follows REST architecture and is set to respond to xml calls.

Here is what I have in my auth app:

models/User.rb

class User < ActiveRecord::Base
end

*controllers/users_controller.rb*

class UsersController < ApplicationController
respond_to :html, :xml, :js

def index
    @users = User.find :all
    respond_with @users
end

def show
    @user = User.find(params[:id])
    respond_with @user
end
.
.
.
end

In a client application

I have a class extending from active resource as follows:

models/user.rb

class User < ActiveResource::Base
    self.site = "http://localhost:80"
end

Here is how I am trying to use it: *controllers/sessions_controller.rb*

class SessionController < ApplicationController

  def home
    @user = User.find(:all)
  end
end

what could go wrong, right?..

But then I am getting the following error:

Started GET "/" for 127.0.0.1 at 2013-09-02 08:33:44 +1200 Processing
by SessionsController#home as HTML Completed 500 Internal Server Error
in 3ms

NameError (uninitialized constant ActiveResource):
app/models/user.rb:1:in <top (required)>'
app/controllers/sessions_controller.rb:4:in
home'

Rendered
/usr/lib/ruby/gems/1.9.1/gems/actionpack-4.0.0/lib/action_dispatch/middleware/templates/rescues/_source.erb
(1.6ms) Rendered /usr/lib/ruby/gems/1.9.1/gems/actionpack-4.0.0/lib/action_dispatch/middleware/templates/rescues/_trace.erb
(2.7ms) Rendered /usr/lib/ruby/gems/1.9.1/gems/actionpack-4.0.0/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb
(2.2ms) Rendered /usr/lib/ruby/gems/1.9.1/gems/actionpack-4.0.0/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb within rescues/layout (37.4ms)

I am using:

ruby 1.9.3p0 (2011-10-30 revision 33570) [i686-linux]
Rails 4.0.0
activeresource (4.0.0) gem is installed

What could I possibly be doing wrong?
Is it possible that ActiveResource failing to connect to localhost:80 and as a result does not get initialized?

EDIT:

done rvm use 2.0.0 so now ruby version is: ruby 2.0.0p247 (2013-06-27 revision 41674) [i686-linux]

EDIT:

RubyGems Environment:
- RUBYGEMS VERSION: 2.0.7
- RUBY VERSION: 1.9.3 (2011-10-30 patchlevel 0) [i686-linux]
- INSTALLATION DIRECTORY: /usr/lib/ruby/gems/1.9.1
- RUBY EXECUTABLE: /usr/bin/ruby1.9.1
- EXECUTABLE DIRECTORY: /usr/bin
- RUBYGEMS PLATFORMS:
- ruby
- x86-linux
- GEM PATHS:
- /usr/lib/ruby/gems/1.9.1
- /home/dmitry/.gem/ruby/1.9.1
- GEM CONFIGURATION:
- :update_sources => true
- :verbose => true
- :backtrace => false
- :bulk_threshold => 1000
- REMOTE SOURCES:
- https://rubygems.org/

Was it helpful?

Solution

I have finally figured this out...

For some reason (I would be grateful if someone can post an explanation why) I had to require active resource manually in my user.rb file.

The correct code to make it work should be:

require 'active_resource'  

class User < ActiveResource::Base  
    self.site = "http://localhost:80"  
end  

P.S
Thank you zeantsoi for your comments, those have led me into a search for reasons of this gem not being loaded.

OTHER TIPS

In your Gemfile add the activeresource gem like so:

gem 'activeresource', require: 'active_resource'

This will make it behave as it should - without having to require it at the beginning of every activeresource model.

ActiveResource should be loaded in your config/application.rb file:

# config/application.rb
# Pick the frameworks you want:
require 'active_resource/railtie'
require "action_controller/railtie"
...

In this case you will be able to configure ActiveResource later in the same file, for example:

# config/application.rb
module TestClient
  class Application < Rails::Application
    config.active_resource.include_format_in_path = false
    config.active_resource.site = "http://localhost:80"
    ...

This is handy if you want to set some default options for all your ActiveResource models and of course you can override any of these options for some specific model:

# app/models/user.rb
class User < ActiveResource::Base
  self.include_format_in_path = true # append .json at the end of url
end
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top