Допустим, я пишу приложение библиотеки для издательской компании, у которой уже есть приложение People.
Итак, в моем приложении библиотеки у меня есть
class Person < ActiveResource::Base
self.site = "http://api.people.mypublisher.com/"
end
и теперь я хочу хранить Article для каждого Person:
class Article < ActiveRecord::Base
belongs_to :person, :as => :author
end
Я предполагаю, что в моей базе данных будет следующая таблица:
Articles
id (PK) | title (string) | body (text) | author_id (integer)
author_id - это не совсем внешний ключ, поскольку у меня нет таблицы People. Остается несколько вопросов:
как мне сказать моему объекту PersonActiveResource, что это has_manyArticles?
Articles.find(:first).author будет работать? Будете ли belongs_to работать даже при условии, что нет ActiveRecord и нет таблицы поддержки?





Я предполагаю, что одна из возможностей для №1, если я могу заставить что-либо из этого работать, заключается в следующем:
class Person < ActiveResource::Base
self.site = "http://api.people.mypublisher.com/"
def articles
Article.find(:all, :conditions => { :person_id => self.id })
end
def add_article(article)
article.person_id = self.id
end
end
Но он теряет много того, что предлагает has_many.
Как вы указываете, вы от многого отказываетесь, потому что ActiveResource не имеет ассоциаций в том смысле, в каком есть ActiveRecord.
Вы уже нашли ответ на вопрос №1. Что касается вопроса № 2, ваша статья модели ActiveRecord должна вести себя нормально, если она настроена с ассоциацией "own_to" с моделью ActiveResource. Это Aritcle.find (: first) .author должен вернуть объект человека, который вам нужен.
Я думаю, что лучшим решением было бы создание метода, возвращающего область видимости.
class Person < ActiveResource::Base
self.site = ..
.
def articles
Article.for_person(self.id)
end
end
class Article < ActiveRecord::Base
named_scope :for_person, lambda { |pid| { :conditions => { :person_id => pid }}}
end