9

私は ActiveResource の使用を検討していますが、現在、自分で解決できないという問題に直面しています (解決策を数日間ネットで検索していました)。

したがって、認証アプリhttp://localhost:80はポート :85 にあり、クライアントはポート :85 にあります

私の認証アプリで

RESTアーキテクチャに従い、xml呼び出しに応答するように設定されたコントローラーを備えたユーザーモデルがあります。

認証アプリにあるものは次のとおりです。

モデル/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

クライアント アプリケーションで

次のように、アクティブなリソースから拡張するクラスがあります。

models/user.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-09-02 08:33:44 +1200 で 127.0.0.1 の GET "/" を開始
HTML としての SessionsController#home による処理 3ms で 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.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 パッチレベル 0) [i686-linux]
- インストール ディレクトリ: /usr/lib/ruby/gems/1.9.1
- RUBY EXECUTABLE : /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 さん
、コメント ありがとうございます。この宝石が読み込まれていない理由を調べてみました。

于 2013-09-02T00:47:37.807 に答える
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 に答える