2009-08-14 14 views
0

Bedenken Sie:Einfache Tabelle Relation

class User < ActiveRecord::Base 
    # name, email, password 
end 

class Article < ActiveRecord::Base 
    # user_id, title, text 
end 

class Favorites < ActiveRecord::Base 
    # user_id, article_id 
end 

Wie kann ich dies in einer Art und Weise alle zusammen, die ich @ user.articles haben kann (Artikel vom Benutzer erstellt) und @ user.favorite_articles (Lieblingsartikel aus Lieblingsmodell)

Vielen Dank im Voraus!

Antwort

1

Sie einen has_many :through Verein können die Lieblingsartikel von Benutzern zu holen. Sie können damit auch die Benutzer aufrufen, die einen bestimmten Artikel favorisiert haben.

class User < ActiveRecord::Base 
    has_many :articles 
    has_many :favorites 
    has_many :favorite_articles, :through => :favorites, :source => :article 
end 

class Article < ActiveRecord::Base 
    belongs_to :user 
    has_many :favorites 
    has_many :favorited_by_users, :through => :favorites, :source => :user 
end 

class Favorite < ActiveRecord::Base 
    belongs_to :article 
    belongs_to :user 
end 
+0

Das war's, danke! –

+0

aha +1, du schlägst mich dazu :) – marcgg

1

Wenn ich verstehe richtig, was man wollte, würde ich sagen

class User < ActiveRecord::Base 
    has_many :articles 
    has_many :favorite_articles, :through => :favorites, :source => :article 
end 

class Article < ActiveRecord::Base 
    has_and_belongs_to_many :user 
end 

class Favorites < ActiveRecord::Base 
    has_and_belongs_to_many :user 
    has_one :article 
end 

bearbeitet: hinzugefügt favorite_articles

+0

Das Problem ist, dass ich mit einem Favoriten-Objekt anstelle eines Artikel-Objekts enden. Ich weiß, dass es eine sehr einfache Möglichkeit gibt, das mit Rails zu tun, aber ich habe es komplett vergessen. Vielleicht war es etwas über eine user_videos Tabelle und dann has_many: durch, aber ich bin mir nicht sicher. Irgendeine Idee? –

+0

Ich habe meine Anwser bearbeitet, um einzuschließen, was Sie wollten. Das sollte gut funktionieren – marcgg