1

ActiveResource 4.0 を使用して、RESTFull API を Rails 4 アプリケーションのモデル クラスにマップしています。オブジェクトを編集しようとしたときにのみ、「SimpleDelegator:Class の未定義のメソッド 'model_name'」というエラーが表示されます。

ActiveResource の子孫によってロードされたオブジェクトは、代わりに SimpleDelegator の子孫として作成されているようです - これは model_name メソッドに応答できません。

ActiveResource コードを読みましたが、なぜこれが起こっているのか理解できませんでした。誰かがこのようなものにつまずいたことがありますか?

私のモデル:

class Database < ActiveResource::Base
  self.size = "api.endpoint"
end

そして私のコントローラー(スニペット)で

def new
  @database = Database.new
end

def edit
  @database = Database.find(params[:id])
  if !@database
    redirect_to databases_path
  end
end 

私のフォームビュー(スニペット):

<%= form_for @database do |d| %>

  <%= d.label :dbname %> <!-- error reported on this line -->
  <%= @database.dbname %>

  <%= d.label :description %>
  <%= @database.description %>

<% end %>
4

1 に答える 1

1

わかりました、問題が見つかりました。また、 activeresource-response gem を使用して、HTTP ヘッダーで送信されるページネーション パラメータを取得しています。

ここでわかるように、この gem は SimpleDelegator を使用して、find メソッドの実行後に応答をラップし、完全な ActiveResource 接続の htt_response を「キャプチャ」します。

宝石でこれを修正するか、別の解決策を使用しようとしますが、この回答は他の人に役立つと思います。

于 2013-09-20T14:38:23.530 に答える