ActiveResource模型未初始化

Dmi*_*eev 9 ruby-on-rails activeresource

我正在寻找使用ActiveResource,但现在面临一个我无法弄明白的问题(现在正在网上搜索解决方案的几天).

所以我有一个身份验证应用程序http://localhost:80和端口上的客户端:85

在我的auth应用程序中

我有一个User模型及其控制器,它遵循REST架构,并设置为响应xml调用.

这是我在我的auth应用程序中的内容:

车型/ User.rb

class User < ActiveRecord::Base
end
Run Code Online (Sandbox Code Playgroud)

*控制器/ 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
Run Code Online (Sandbox Code Playgroud)

在客户端应用程序中

我有一个从活动资源扩展的类,如下所示:

车型/ user.rb

class User < ActiveResource::Base
    self.site = "http://localhost:80"
end
Run Code Online (Sandbox Code Playgroud)

以下是我尝试使用它的方法:*controllers/sessions_controller.rb*

class SessionController < ApplicationController

  def home
    @user = User.find(:all)
  end
end
Run Code Online (Sandbox Code Playgroud)

什么可能出错,对吧?

但后来我收到以下错误:

在2013-09-02 08:33:44开始获取"/"for 127.0.0.1 +1200
由SessionsController 处理#home 为HTML已完成500内部服务器错误
3ms

NameError(未初始化的常量ActiveResource):
app/models/user.rb:1:in home' <top (required)>'
app/controllers/sessions_controller.rb:4:in

呈现
/usr/lib/ruby/gems/1.9.1/gems/actionpack-4.0.0/lib/action_dispatch/middleware/templates/rescues/_source.erb(1.6ms
)呈现/usr/lib/ruby/gems/1.9 .1/gems/actionpack-4.0.0/lib/action_dispatch/middleware/templates/rescues/_trace.erb
(2.7ms )呈现/usr/lib/ruby/gems/1.9.1/gems/actionpack-4.0.0/ lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb
(2.2ms)呈现/usr/lib/ruby/gems/1.9.1/gems/actionpack-4.0.0/lib/action_dispatch/middleware/templates/rescues/diagnostics救援/布局中的.erb(37.4ms)

我在用:

ruby 1.9.3p0(2011-10-30修订版33570)[i686-linux]安装了
Rails 4.0.0
activeresource(4.0.0)gem

我怎么可能做错了?
ActiveResource是否可能无法连接,localhost:80因此无法初始化?

编辑:

完成rvm使用2.0.0所以现在ruby版本是:ruby 2.0.0p247(2013-06-27修订版41674)[i686-linux]

编辑:

RubyGems环境:
- RUBYGEMS版本:2.0.7
- RUBY版本:1.9.3(2011-10-30 patchlevel 0)[i686-linux]
- 安装目录:/usr/lib/ruby/gems/1.9.1
- RUBY EXECUTABLE :/usr/bin/ruby1.9.1
- EXECUTABLE DIRECTORY:/ usr/bin
- RUBYGEMS平台:
- ruby
- x86-linux
- GEM路径:
- /usr/lib/ruby/gems/1.9.1
- /home/dmitry/.gem/ruby​​/1.9.1
- GEM配置:
- :update_sources => true
- :verbose => true
- :backtrace => false
- :bulk_threshold => 1000
- 远程来源:
- https://rubygems.org/

Dmi*_*eev 17

我终于想通了......

出于某种原因(如果有人可以发布解释原因,我将不胜感激)我必须在user.rb文件中手动要求活动资源.

使其工作的正确代码应该是:

require 'active_resource'  

class User < ActiveResource::Base  
    self.site = "http://localhost:80"  
end  
Run Code Online (Sandbox Code Playgroud)

PS
谢谢你zeantsoi的评论,这些已经让我进入搜索这个宝石未被加载的原因.


Mik*_*key 16

在你Gemfile添加activeresource gem时如下:

gem 'activeresource', require: 'active_resource'
Run Code Online (Sandbox Code Playgroud)

这将使其表现得如此 - 无需在每个activeresource模型的开头都需要它.


小智 10

ActiveResource应该加载到您的config/application.rb文件中:

# config/application.rb
# Pick the frameworks you want:
require 'active_resource/railtie'
require "action_controller/railtie"
...
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您将能够ActiveResource稍后在同一文件中进行配置,例如:

# config/application.rb
module TestClient
  class Application < Rails::Application
    config.active_resource.include_format_in_path = false
    config.active_resource.site = "http://localhost:80"
    ...
Run Code Online (Sandbox Code Playgroud)

如果您想为所有ActiveResource模型设置一些默认选项,这很方便,当然您可以覆盖某些特定模型的任何选项:

# app/models/user.rb
class User < ActiveResource::Base
  self.include_format_in_path = true # append .json at the end of url
end
Run Code Online (Sandbox Code Playgroud)