2009-05-16 1 views
1

Я пытаюсь создать ActiveResource объекты для трех объектов во внутреннем приложении.Как использовать ActiveResource с настраиваемой схемой URL?

Есть Tag s, Tagging s и s Taggable:

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

Tag «s :tag является URL-закодирован буквенный текст тега. Tagging's :id - это автоинкрементное целое число. Taggable:type - это строка. Не существует конечного набора типов taggable - служба может поддерживать тегирование чего-либо. Taggable:key - это поле идентификатора, которое присваивает услуга для этого типа Taggable. Это может быть бизнес-ценность, например, имя пользователя emplyee или просто автоинкрементное целое число.

Если бы это были 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? Благодаря!

+0

Помог ли мой ответ? если да, можете ли вы принять его, пожалуйста? :) Если нет - сообщите мне, что вы в конце концов сделали. –

ответ

1

Вы используете Rails 3.0? Если это так, то теперь вы можете сделать почти то же самое в ActiveResource.

Если нет, пытаясь рассмотреть гиперактивный ресурс: http://github.com/taryneast/hyperactiveresource

Что я протянул сделать ActiveResource работу почти так же, как Active Record. Он поддерживает ассоциации, как и AR, хотя он не поддерживает «сквозной» - вам может потребоваться ручной код, например, для Baz, который has_many: foos,: 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 

 Смежные вопросы

  • Нет связанных вопросов^_^