9

我正在考虑使用 ActiveResource,但现在面临一个我自己无法弄清楚的问题(现在正在网上搜索几天的解决方案)。

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

在我的身份验证应用程序中

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

这是我的身份验证应用程序中的内容:

模型/用户.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

在客户端应用程序中

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

模型/用户.rb

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

这是我尝试使用它的方式:*controllers/sessions_controller.rb*

class SessionController < ApplicationController

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

会出什么问题,对吗?

但后来我收到以下错误:

在 2013 年 9 月 2 日 08:33:44 +1200 由 SessionsController#home 处理为 127.0.0.1 开始 GET "/"作为 HTML 在 3 毫秒
内完成 500 内部服务器错误

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.4 毫秒)

我在用:

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 补丁级别 0)[i686-linux]
- 安装目录:/usr/lib/ruby/gems/1.9.1
- RUBY 可执行文件:/usr/bin/ruby1.9.1
- 可执行目录:/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/

4

3 回答 3

17

我终于想通了……

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

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

require 'active_resource'  

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

PS
感谢zeantsoi的评论,这些评论让我开始搜索未加载此 gem 的原因。

于 2013-09-02T00:47:37.807 回答
16

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

gem 'activeresource', require: 'active_resource'

这将使其行为正常 - 而不必在每个活动资源模型的开头都需要它。

于 2014-01-27T16:00:24.373 回答
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
于 2013-12-13T14:54:10.093 回答