Rails hat viele und gehört zu einem
Ich habe eine User
Modell hat viele projects
und ein Project
Modell, das kann viele users
, sondern gehört auch zu einem einzelnen Benutzer (dh der Benutzer, der dieses Projekt erstellt haben). Es gehört zu einer User
. Es ermöglicht auch eine Liste der Benutzer an, die mit ihm verbunden sein, denken, Zusammenarbeit.
Mit diesem im Verstand, meine Modelle so Aussehen:
class User < ActiveRecord::Base
has_many :assigned_projects
has_many :projects, :through => :assigned_projects
end
class Project < ActiveRecord::Base
belongs_to :user
has_many :assigned_projects
has_many :users, :through => :assigned_projects
end
class AssignedProject < ActiveRecord::Base
belongs_to :user
belongs_to :project
end
Nun, wenn ich will erstellen Sie ein neues Projekt durch einen User
, das ist, wie ich es tun würde:
user = User.create(:name => 'injekt')
user.projects.create(:name => 'project one')
Nun, ich weiß, dass projects
wird durch eine AssignedProject
join-Modell, das ist der Grund, warum project.user
zurück nil
. Was ich kämpfen, um meinen Kopf herum, ist der beste Weg, um ordnen Sie die Projekt-Ersteller (die übrigens nicht müssen zu user
, könnte es sein creator
oder sonst etwas beschreibend, wie lange, wie es ist von Typ User
).
Die Idee ist, erstellen Sie eine Methode, um zurück projects_created
aus einer User
die wählen Sie nur Projekte, die von diesem Benutzer erstellte. Wo user.projects
werden natürlich wieder ALLE Projekte, die einem Benutzer zugeordnet ist.
Vorausgesetzt, diese Art der Vereinigung ist ziemlich gemeinsame, was ist der beste Weg, das zu erreichen, was ich will? Jede Richtung ist sehr geschätzt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hinzufügen creator_id Spalte der Tabelle Projekte für den Ersteller Beziehung, und fügen Sie dann die Assoziationen zu den Modellen:
http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#method-i-has_many
Project.creator
um die zugehörigen Benutzer aus demCreatedProjects
Vereins. Das wäre zu lösen (glaube ich) dein problem. Soweit wie ordnen Sie es, könnten Sie tun, einbefore_create
Haken in das Modell zu ordnen dieses den aktuell angemeldeten Benutzer, oder ein anderer Benutzer (je nach Projekt auch die Logik).has_many :created_projects, :class_name => "Project", :foreign_key => :creator_id
aber im Projekt, hatte ichbelongs_to :creator, :class_name => 'User'
ohne den foreign key, ich denke, ich nahm an, es würde diese Arbeit heraus aus der:creator
Referenz. Vielen Dank Jungs!belongs_to :user
redundant nach derbelongs_to :creator, :class_name => "User", :foreign_key => :creator_id
Hinzugefügt wird? In meinem Fall ich ' m denken ändern Projektsuser_id
Spalte name, umcreator_id.
Wollte ich hinzufügen, dass wenig Verbesserung zu entwerfen. Wir nicht wirklich benötigen intermediate-Modell, weil es enthält keine extra-Spalte andere als reference_ids daher HABTM-association ist am besten geeignet, über hier.
role
redest du? ich bin nicht immer Sie auf diese. Gibt es eine Notwendigkeit, Datum, an dem Projekt Zuordnung gemacht hat? Wenn zusätzliche Spalten gehen, um dort dannhas_many through
könnte es eine gute Wahl.