Так что я работаю над приложением rails для пользователей, чтобы создавать события (и посещать другие созданные события).Вы можете прочитать о назначении здесь (для проекта Odin): https://www.theodinproject.com/courses/ruby-on-rails/lessons/associations
В любом случае, я думал, что понял много-много отношений в рельсах, но то, как я видел, как другие люди пишут модели, сбивает с толкудля меня.
Мне кажется, что это должно быть что-то вроде:
class User < ApplicationRecord
has_many :attendances
has_many :events, through: :attendances
end
class Attendance < ApplicationRecord
belongs_to :user
belongs_to :event
end
class Event < ApplicationRecord
has_many :users
has_many :users, through: :attendances
end
Это имеет смысл для меня, потому что пользователь может создать много событий, и событие может иметь много пользователей, посещающих,(Хотя посещаемость, вероятно, неправильное слово, может быть, приглашает или что-то в этом роде.)
Но я видел несколько странных примеров (Вы можете увидеть другие исходные коды ниже в проекте), и кажется, что они добавляют гораздо большек моделям, а также переименование источника / foreign_key / class_name.
Я что-то упустил?Это все еще позволяет пользователю «владеть» событием, верно?Может быть, я неправильно понимаю, как много ко многим работает.Но это подходит, по крайней мере, в моем представлении о том, как это должно быть.
Для справки, некоторые другие модели, которые я видел, были похожи на это:
class Event < ActiveRecord::Base
belongs_to :creator, :class_name => "User"
has_many :event_attendees, :foreign_key => :attended_event_id
has_many :attendees, :through => :event_attendees
end
class EventAttendee < ActiveRecord::Base
belongs_to :attendee, :class_name => "User"
belongs_to :attended_event, :class_name => "Event"
end
class User < ActiveRecord::Base
has_many :created_events, :foreign_key => :creator_id, :class_name => "Event"
has_many :event_attendees, :foreign_key => :attendee_id
has_many :attended_events, :through => :event_attendees, :foreign_key => :attendee_id'
end
В основном аналогичные вещи, описанные выше.Я не совсем уверен, что это делает?Или зачем нужно все лишнее.