Имеет много AND HABTM на одной модели - PullRequest
0 голосов
/ 02 ноября 2011

У меня есть две модели сайта и пользователя.Когда пользователь регистрируется в приложении, он выбирает сайт, к которому он принадлежит.Итак, у сайта есть has_many: users, а user own_to: site.

app \ models \ site.rb

class Site < ActiveRecord::Base

has_many :users

end

app \ models \ user.rb

class User < ActiveRecord::Base

  devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable

    belongs_to :site
    has_and_belongs_to_many :roles, :uniq => true

end

Это действительно отражает домашний сайт пользователя, и я часто звонювзаимосвязь, чтобы выяснить, откуда пользователь, например:

<% = user.lastname%>, <% = user.firstname%> с сайта: <% = user.site.name%>, которыйпереводит на: Смит, Джон с сайта: Операции GenericCo

Я хотел бы добавить отношение habtm, при котором пользователи могут ПОДДЕРЖИВАТЬ множество сайтов, чтобы пользователь мог выбирать, какие сайты он поддерживает, из флажков, перечисляющих сайты.,

Я знаком с отношениями habtm, потому что у моих пользователей много ролей.Я установил это как

has_and_belongs_to_many :roles, :uniq => true

Я точно знаю, что если я добавлю таблицу соединений и использую

has_and_belongs_to_many: sites

на моей модели, то все сойдет с уматонны ошибок.Буду признателен за любые полезные советы и подсказки кода.

1 Ответ

4 голосов
/ 02 ноября 2011

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

has_and_belongs_to_many :supported_sites, :class_name => 'Site'

В зависимости от того, как вы называете вещи в своей базе данных, вам также может понадобиться указать: join_table,: foreign_key или: association_foreign_key. Взгляните на раздел «Опции» http://apidock.com/rails/ActiveRecord/Associations/ClassMethods/has_and_belongs_to_many для получения дополнительной информации.

...