Два ресурса с двумя разными отношениями в рельсах
Я новичок в рельсах, и у меня есть ситуация, в которой я не могу разобраться.
Допустим, у меня есть два ресурса, пользователи и виджеты.
Пользователи могут использовать виджеты, но виджеты также создаются пользователем и должны принадлежать пользователю, который их создал. Там должен быть пользователь использует виджет, а пользователь владеет виджетом. Это то, что я ищу?
Class User < ActiveRecord::Base
has_many :uses
has_many :widgets, :through => :uses
has_many :owns
has_many :widgets, :through => :owns
end
Class Widget < ActiveRecord::Base
has_one :own
has_many :uses
has_many :users, :through => :uses
end
Class Use < ActiveRecord::Base
belongs_to :user
belongs_to :widget
end
Class Own < ActiveRecord::Base
belongs_to :user
belongs_to :widget
end
1 ответ
Решение
Я бы сделал это немного по-другому.
Class User < ActiveRecord::Base
has_many :uses
has_many :widgets, :through => :uses
has_many :owned_widgets, :class_name => "Widget"
end
Class Widget < ActiveRecord::Base
belongs_to :owner, :class_name => "User"
has_many :uses
has_many :users, :through => :uses
end
Class Use < ActiveRecord::Base
belongs_to :user
belongs_to :widget
end
Я немного изменил имена, у вас был конфликт имен на widget
Вы не можете иметь две ассоциации с одним и тем же именем. Я также удалил has_one и просто установил owner
который будет иметь Foreign_key owner_id
с установленным классом User
, Кроме этого, вы прекрасно настраиваете отношения многие ко многим.