Две ссылки has_many между одинаковыми моделями - PullRequest
1 голос
/ 28 июня 2011

У меня пользователей , у которых продуктов через ссылку habtm, которая работает.

Я хочу добавить ссылку между пользователем модель и модель продукта , чтобы отслеживать создателя этого продукта (который, конечно, не всегда владеет продуктом)

Но когда янапишите в моем user и product моделирует новую ссылку, приложение облажается, потому что я не могу отличить создатель продукта от владельца (много) продуктов .

Вы можете мне помочь?Вот мои модели:

class Product < ActiveRecord::Base
  belongs_to :group
  has_and_belongs_to_many :authors
  has_and_belongs_to_many :users   # THIS IS OK (with appart table)
  has_many :users, :as => creator  # THIS LINE DOES NOT WORK AT THE MOMENT
end

class User < ActiveRecord::Base
  has_and_belongs_to_many :products
  belongs_to :user                 # THIS LINE DOES NOT WORK AT THE MOMENT
  default_scope :order => "username ASC"
end

С базой данных все в порядке, и я могу сохранить user_id в столбце создателя из моего продукта, но ссылка product.creator.name неработать (из-за неправильной модели, я полагаю), я могу только прочитать user_id, который находится в столбце, но не получить объект пользователя со всеми его атрибутами.

rem: user.products работает отлично, но только когда я удаляю свою новую ссылку для создателя ...

Спасибо!

Ответы [ 2 ]

0 голосов
/ 28 июня 2011

Синтаксис :as предназначен для полиморфных ассоциаций - это не то, что вам нужно.Ваши комментарии по поводу названий ваших столбцов немного неоднозначны, поэтому я предполагаю, что в вашей таблице products есть столбец user_id, который является идентификатором создателя этого продукта (я включаю только соответствующиеассоциации) ...

class Product < ActiveRecord::Base
  has_and_belongs_to_many :users
  belongs_to :creator, :foreign_key => :user_id, :class_name => "User"
end

class User < ActiveRecord::Base
  has_and_belongs_to_many :products
  has_many :owned_products, :class_name => "Product"
end
0 голосов
/ 28 июня 2011

Для этого есть хороший драгоценный камень: https://github.com/spovich/userstamp

Я использовал его в своем проекте, и он хорошо работает - вы просто добавляете «штампованный» в ваши модели, а затем creator_id (и updater_id) заполняются автоматически.

...