Могут ли модели ActiveResource интегрироваться с моделями ActiveRecord? - PullRequest
4 голосов
/ 01 февраля 2009

Я работаю над приложением Rails, которое будет служить системой аутентификации для других приложений Rails через функцию ActiveResource в Rails.

Приложение аутентификации имеет модель ActiveRecord, которая называется User. Клиентское приложение имеет модель ActiveResource, которая называется User. Я знаю, что в клиентском приложении я могу делать что-то вроде user.save, и оно будет выполнять операцию PUT, используя XML по HTTP.

Но что, если я хочу добавить в User модель has_many :contacts моего клиентского приложения или что-то в этом роде (contacts - это модель ActiveRecord в клиентском приложении)? Тогда я бы хотел сделать что-то вроде: получить все Contact, которые принадлежат некоторым User.

Это возможно?

(Я заметил, что был задан похожий вопрос , но ответов было немного).

Ответы [ 2 ]

5 голосов
/ 01 февраля 2009

Краткий ответ: нет. Классы, включенные в has_many, belongs_to, has_and_belongs_to_many, живут в ActiveRecord и создают запросы SQL, чтобы заставить работать ассоциации.

Тем не менее, вы можете сделать так, чтобы это выглядело как ассоциация, вам просто нужно написать свои собственные методы. На который вы ответили на вопрос, на который вы ссылались.

Итак, добавьте столбец к вашей модели контактов, который является user_id или любым другим ключом, который вам нужно передать в вашу User.find модель ActiveResource, и вы могли бы стать частью договора об ассоциации, например так:

class User < ActiveResource::Base
  # boilerplate ActiveResource url stuff

  def contacts
    Contact.find(:all, :conditions => { :user_id => self.id })
  end
end

class Contact < ActiveRecord::Model
  def user
    User.find_by_user_id(self.user_id)
  end
end

Существует гораздо больше, что вы получаете от has_many бесплатно, но в этом суть.

3 голосов
/ 25 февраля 2013

Этот вопрос древний, но я недавно столкнулся с этим:

http://yetimedia.tumblr.com/post/35233051627/activeresource-is-dead-long-live-activeresource

Из должности:

Базовая поддержка ассоциаций: has_many, has_one, assign_to теперь можно использовать в моделях ActiveResource.

В публикации опубликовано несколько других улучшений, которые могут потребовать повторного просмотра ActiveResource, даже если он был удален из Rails 4.0.

...