Aby wyrazić, że grupa może mieć wielu użytkowników, a użytkownik może należeć do wielu grup , ustawić następujące skojarzenia:Szyny: Dlaczego skojarzenie "has_many ...,: through => ..." powoduje "NameError: stała niezainicjowana ..."
class Group < ActiveRecord::Base
has_many :users_groups
has_many :users, :through => :users_groups
end
class User < ActiveRecord::Base
has_many :users_groups
has_many :groups, :through => :users_groups
end
class UsersGroups < ActiveRecord::Base
belongs_to :user
belongs_to :group
end
jednak, gdy wpisuję:
Group.find(1).users
uzyskać:
NameError: uninitialized constant Group::UsersGroup
Co robię źle ?
Dzięki! Po prostu wygląda na to, że mam dziwny/zły model o nazwie 'UsersGroup'. Nie chcę, aby jeden z nich był liczbą mnogą, a drugi liczbą pojedynczą. Może powinienem zmienić nazwę modelu na coś podobnego do UserGroupPair, aby nazwa tabeli brzmiała "user_group_pairs". Co myślisz ? –
Jeśli masz model łączenia, standardową praktyką jest wymyślanie słowa opisującego powiązanie. Na przykład GroupMembership lub coś takiego. Aby to sprawdzić, czy na pewno potrzebujesz modelu łączenia? Możesz uzyskać tylko stolik, jeśli sprzężenie nie wymaga logiki. – Skilldrick
Masz na myśli nazwę modelu 'GroupMembership' i nazwę tabeli' group_membership', tj. Obie liczby pojedyncze? Nie jestem pewien, czy zrozumiałem twój drugi punkt dotyczący pozbycia się stołu do łączenia. Czy mógłbyś trochę rozwinąć? –