модельные ассоциации в рельсах - PullRequest
0 голосов
/ 17 марта 2012

В моем приложении пользователь может создать встречу.

class User
    has_many :appointments
end

class Appointment
    belongs_to :user
end

Однако пользователь также может присоединиться к другой встрече, созданной другим пользователем.

Может ли кто-нибудь порекомендовать способ настройки моих моделей?

Я прочитал http://guides.rubyonrails.org/association_basics.html и не могу найти правильную связь.

Я действительно хочу сделать это путём, а не взламывать мое приложение.

Будет ли has_and_belongs_to_many подходить?

1 Ответ

1 голос
/ 17 марта 2012

Похоже, вы, вероятно, хотите использовать has_many с какой-то моделью, описывающей отношения между пользователями и встречами:

# models/user_appointment.rb
class UserAppointment < ActiveRecord::Base
  belongs_to :user
  belongs_to :appointment
end

# models/appointment.rb
class Appointment < ActiveRecord::Base
  has_many :user_appointments
  has_many :users, :through => :user_appointments
end

# models/user.rb
class User < ActiveRecord::Base
  has_many :user_appointments
  has_many :appointments, :through => :user_appointments
end

Конечно, вы, вероятно, также захотитепредставлять владельца назначения.Вы можете расширить свою модель Appointment, чтобы отразить, кому она действительно принадлежит.Можно указать поле отношения в UserAppointment, чтобы описать, является ли пользователь владельцем или подписчиком, но может быть проще просто добавить отношение belongs_to к модели назначения:

# models/appointment.rb
class Appointment < ActiveRecord::Base
  has_many :user_appointments
  has_many :users, :through => :user_appointments
  belongs_to :owner, :class_name => 'User'
end
...