ActiveResource模型未初始化

时间:2013-09-01 20:38:10

标签: ruby-on-rails activeresource

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

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

在我的身份验证应用

我的用户模型及其控制器遵循REST架构,并设置为响应xml调用。

以下是我在auth应用中的内容:

模型/ User.rb

class User < ActiveRecord::Base
end

*控制器/ 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

在客户端应用程序中

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

模型/ user.rb

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

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

class SessionController < ApplicationController

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

什么可能出错,对吧?..

但后来我收到以下错误:

  

在2013-09-02 08:33:44 +1200处理中开始获取127.0.0.1的“/”   通过SessionsController#home作为HTML已完成500内部服务器错误
  在3ms

     

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

     

渲染
  /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 VERSION:1.9.3(2011-10-30 patchlevel 0)[i686-linux]
     - 安装目录:/usr/lib/ruby/gems/1.9.1
     - RUBY EXECUTABLE:/usr/bin/ruby1.9.1
     - 可执行的目录:/ usr / bin
     - RUBYGEMS PLATFORMS:
       - 红宝石
       - x86-linux
     - 创业板路径:
        - /usr/lib/ruby/gems/1.9.1
        - /home/dmitry/.gem/ruby/1.9.1
     - 创业板配置:
        - :update_sources =&gt;真正
        - :verbose =&gt;真正
        - :backtrace =&gt;假
        - :bulk_threshold =&gt; 1000
     - 远程来源:
        - https://rubygems.org/

3 个答案:

答案 0 :(得分:17)

我终于弄清楚了......

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

使其正常运行的正确代码应为:

require 'active_resource'  

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

P.S
感谢您zeantsoi的评论,这些已经让我搜索了这个宝石没有被加载的原因。

答案 1 :(得分:16)

Gemfile中添加activeresource gem,如下所示:

gem 'activeresource', require: 'active_resource'

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

答案 2 :(得分:10)

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

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

在这种情况下,您可以稍后在同一文件中配置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"
    ...

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

# app/models/user.rb
class User < ActiveResource::Base
  self.include_format_in_path = true # append .json at the end of url
end