关于 Rails 关联的解释 - Rails 4

Explanation on Rails Associations - Rails 4

我是 rails 的新手,非常感谢您的帮助和建议,因为我发现这具有挑战性

Aim: i want the creator of the event to be able to select more than one user as hosts for a created event (just like how facebook allows the creator of a page to be be able to select users as admins of a created page). Is the below how my model and schema should be displayed?

我的目标是构建类似这张图片的东西。 Event1 我可以 select Ian & Jesse 作为主持人,Event2 我也可以 select Ian 再次作为主持人和 select Emma

这是我目前设想的建造方式(非常感谢您的指导):

models
user.rb
has_many events

event.rb
belongs_to user

host.rb
belongs_to user
has_many events

schema

users
name
email

events
title
address
user_id

hosts
user_id
event_id

开始将此作为评论写下来,但意识到它变得太罗嗦了。

你的模型坏了... event 有很多用户.. 它 belong_to 没有一个 user.

您拥有的是用户和事件之间的多对多关系,需要通过连接 table(又名 associative/junction table)来解决。尽管这违反了 rails 约定,但您已经通过某种方式与主机 table 解决了这个问题。

你想要的是这样的:

型号

user.rb

has_and_belongs_to_many :events

event.rb

has_and_belongs_to_many :users

并创建一个引用两个模型的连接 table

users table
  name
  email

events table
  title
  address

events_hosts table
  user_id
  event_id

rails 约定是通过连接 table 的两个名称来命名连接 table,它按词法顺序连接 - 即主机之前的事件,连接在一起给 events_hosts.

或者,如果您愿意,也可以创建连接模型:

EventHost

belongs_to :user
belongs_to :event

并将其他两个模型中的 has_and_belongs_to_many 修改为 has_many :event_hosts - 数据库架构将保持不变。