1

ActiveResource内部アプリケーションで3つのオブジェクトのオブジェクトを作成しようとしています。

Tags、Taggings、およびTaggablesがあります。

http://tagservice/tags/:tag
http://tagservice/taggings/:id
http://tagservice/taggables/:type/:key

Tag's:tagは、URLエンコードされたリテラルタグテキストです。 Tagging:idは自動インクリメントされた整数です。 Taggable:typeは文字列です。タグ付け可能なタイプの有限のセットはありません-サービスは何でもタグ付けをサポートできます。 Taggable'sは、そのタイプのサービスが割り当てる:keyIDフィールドです。Taggableこれは、従業員のユーザー名のようなビジネス価値、または単に自動インクリメントされた整数である可能性があります。

これらがActiveRecordオブジェクトの場合、次のようにコーディングします。

class Tag < ActiveRecord::Base
  has_many :taggings
  has_many :taggables, :through => :taggings
  def self.find_by_id(id)
    find_by_name(id)
  end
  def to_param
    CGI::escape(self.name)
  end
end

class Tagging < ActiveRecord::Base
  belongs_to :tag
  belongs_to :taggable
end

class Taggable < ActiveRecord::Base
  has_many :taggings
  has_mnay :tags, :through => :taggings
  def self.find_by_id(id)
    find_by_type_and_key(*id.split('/'))
  end
  def to_param
    "#{self.type}/#{self.key}"
  end
end

それらのクラスが何を望んでいるのか誰かが知っていますActiveResourceか?ありがとう!

4

1 に答える 1

1

Rails 3.0 を使用していますか? その場合は、ActiveResource でほぼ同じことを実行できます。

そうでない場合は、ハイパーアクティブ リソースを試すことを検討してください: http://github.com/taryneast/hyperactiveresource

ActiveResource が Active Record とほぼ同じように機能するように拡張しました。AR と同じように関連付けをサポートしていますが、"through" はサポートしていません。

# ugly, but does the job
def foos
  return [] unless bars.present?
  foo_set = []
  self.bars.each {|b| foo_set += b.foos }
  foo_set
end
于 2010-08-31T10:28:10.823 に答える