Два ресурса с двумя разными отношениями в рельсах

Я новичок в рельсах, и у меня есть ситуация, в которой я не могу разобраться.

Допустим, у меня есть два ресурса, пользователи и виджеты.

Пользователи могут использовать виджеты, но виджеты также создаются пользователем и должны принадлежать пользователю, который их создал. Там должен быть пользователь использует виджет, а пользователь владеет виджетом. Это то, что я ищу?

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, Кроме этого, вы прекрасно настраиваете отношения многие ко многим.

Другие вопросы по тегам