два ресурса с двумя разными отношениями в рельсах - PullRequest
1 голос
/ 15 июля 2010

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

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

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

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 Ответ

1 голос
/ 15 июля 2010

Я бы сделал это немного по-другому.

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, который будет иметь посторонний ключ owner_id с классом, установленным в User.Кроме того, вы прекрасно настраиваете отношения многие ко многим.

...