1

私は主にテーブル容量でRails3アプリを開発しています。私はsavon_modelとActiveModelを使用して、同等のActiveRecordと同様の動作を生成しています。以下は私のコードです:

class TestClass
  include Savon::Model
  include ActiveModel::Validations

  # Configuration
  endpoint "http://localhost:8080/app/TestService"
  namespace "http://wsns.test.com/"

  actions :getObjectById, :getAllObjects

  attr_accessor :id, :name

  def initialize(hash)
    @id = hash[:id]
    @name = hash[:name]
  end

  client do
    http.headers["Pragma"] = "no-cache"
  end

  def self.all
    h = getAllObjects(nil).to_array
    return convert_array_hash_to_obj(h, :get_all_objects_response)
  end

  def self.find(id)
    h = getObjectById(:arg0 => id).to_hash
    return convert_hash_to_obj(h, :get_object_by_id_response)
  end

private

  def self.convert_array_hash_to_obj(arrayhash, returnlabel)
    results = Array.new

    arrayhash.each do |hash|
      results << convert_hash_to_obj(hash, returnlabel)
    end

    return results

  end

  def self.convert_hash_to_obj(hash, returnlabel)
    return TestClass.new(hash[returnlabel][:return])
  end

end

OK、すべてが期待どおりに機能します。値はWebサービスからページにプルされます。残念ながら、クライアント側で生成されたhtmlを見ると、いくつかの問題があります。[表示]リンクは次の行に沿っています。

/testclasses/%23%3CTestClass:0xa814cb4%3E

それ以外の...

/testclasses/1

そこで、出力を比較するために、コンソールにオブジェクト(ハッシュ?)を印刷しました。

[#<System:0xa814cb4 @id="1", @name="CIS">]

私が信じているものの代わりに...

[#<System id="1", name="CIS">]

3つの質問があります:
1:印刷時にクラス名の16進サフィックスは何ですか
2:コンソールに印刷するときに目的の出力に一致するようにクラスを変更するにはどうすればよいですか?
3:フロントエンドリンク(表示、編集、削除)が壊れているのはなぜですか?簡単な修正はありますか?

ごみコード/愚かな質問をありがとうございました。これは私の最初のRubyまたはRailsアプリです!

ガレス

4

1 に答える 1

0
  1. 16 進数のサフィックスは、インスタンスのオブジェクト ID です。System
  2. inspectインスタンスメソッドを実装することで、コンソールの出力を操作できます
  3. Rails url ヘルパーは、to_paramインスタンス メソッドを使用してこれらのリンクを作成します。クラスを ActiveRecord の代替として使用する場合は、これを実装する必要があります。

一般的に言えば、モデル クラスの独自の実装ですべての Rails グッズを使用する場合ActiveModel:Lint::Testは、ActiveModel API のどの部分が期待どおりに機能しているかを確認するために使用する必要があります。

詳細については、http: //api.rubyonrails.org/classes/ActiveModel/Lint/Tests.htmlを参照してください。

于 2012-09-07T10:28:46.077 に答える