Basierend auf den gegebenen Informationen, würde ich sagen, eine has_many through:
Zuordnung für beide Modelle einrichten. Fügen Sie im Modell User
eine Spalte für primary_item_id
hinzu, und fügen Sie dann scope zum User
Modell mit dem Namen primary_item
hinzu, das das primäre Element dieses Benutzers abruft. Beachten Sie, dass eine Zuordnung has_many through:
erfordert, dass Sie auch eine verknüpfte Join-Tabelle UserItems
erstellen.
class User < ActiveRecord::Base
has_many :user_items
has_many :items, through: :user_items
scope :primary_item, -> { Item.find(self.primary_item_id) }
end
class UserItem < ActiveRecord::Base
belongs_to :user
belongs_to :item
end
class Item < ActiveRecord::Base
has_many :user_items
has_many :users, through: :user_items
end
dass die relevanten Informationen für die ActiveRecord
Modelle ist. Sie müssen außerdem Migrationen ausführen, um die Tabelle UserItems
zu erstellen und die Spalte primary_item_id
zur Tabelle Users
hinzuzufügen. Beachten Sie, dass Sie :foreign_key
nirgendwo verwenden.
Ich denke, Ihre Verknüpfung vor der Bearbeitung könnte funktionieren. ': foreign_key' wird von' has_one' unterstützt. http://guides.rubyonrails.org/association_basics.html#options-for-has-one Das heißt, wenn ein Element nur einen Besitzer haben kann. Wenn mehrere Personen dasselbe Element wie ihr primäres Element haben können, sollte die Assoziation vielleicht in die andere Richtung gehen. –
Mit has_one würde es aber nicht für den Fremdschlüssel in der Elementtabelle und nicht in der Benutzertabelle suchen? Würde es besser sein? – rantingsonrails
Ja, wenn die Beziehung ist, dass viele Benutzer das gleiche primäre Element haben können, aber ein Benutzer nur ein solches primäres Element haben kann, können Sie eine 'primary_item_id' für Benutzer und ein' gehört_to' für Benutzer haben. –