2009-02-01 58 views
4

我正在研究Rails應用程序,該應用程序將通過Rails的ActiveResource功能充當其他Rails應用程序的身份驗證系統。ActiveResource模型可以與ActiveRecord模型集成嗎?

身份驗證應用程序有一個名爲User的ActiveRecord模型。客戶端應用程序有一個名爲User的ActiveResource模型。我知道在客戶端應用程序中,我可以執行諸如user.save之類的操作,它將使用基於HTTP的XML執行PUT操作。

但是如果我想投入我的客戶端應用程序的User模型has_many :contacts或類似的東西(contacts是在客戶端應用程序ActiveRecord模型)是什麼?然後,我想要做的事情就像獲得屬於User的所有Contact一樣。

這可能嗎?

(我注意到一個similar question有人問,但並沒有很多的反應。)

回答

5

簡短的回答:沒有。 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

這個問題是古老的,但我最近碰到這樣跑:

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

從帖子:

對協會的基本支持:的has_many,HAS_ONE,belongs_to的現在可以用在ActiveResource模型。

在發佈中還提到了一些其他的改進,即使它已從Rails 4.0中刪除,但仍可能需要再次查看ActiveResource。

+0

從ActiveResource 4.0開始,似乎從ActiveResource到ActiveRecord的關聯不起作用。我不知道這是一個錯誤還是一個預期的功能,或者至少我無法實現它的功能。 – Smar 2014-02-09 12:47:42