【问题标题】:Explanation on Rails Associations - Rails 4Rails 关联说明 - Rails 4
【发布时间】:2016-12-03 15:33:38
【问题描述】:

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

目标:我希望活动的创建者能够选择多个用户作为 创建事件的主持人(就像 facebook 如何允许创建者 一个页面,以便能够选择用户作为创建页面的管理员)。下面是我的模型和架​​构应该如何显示?

我的目标是构建类似这个图像的东西。 Event1 我可以选择 Ian & Jesse 作为主持人,Event2 我也可以再次选择 Ian 作为主持人并选择 Emma

这就是我迄今为止想象的构建方式(非常感谢您的指导):

models
user.rb
has_many events

event.rb
belongs_to user

host.rb
belongs_to user
has_many events

架构

users
name
email

events
title
address
user_id

hosts
user_id
event_id

【问题讨论】:

  • 您的管理员也是User 模型吗?还是其他型号?

标签: ruby-on-rails ruby-on-rails-4 activerecord model-associations


【解决方案1】:

开始写这篇评论,但意识到它变得太罗嗦了。

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

您所拥有的是用户和事件之间的多对多关系,需要通过连接表(也称为关联/连接表)来解决。尽管这违反了 rails 约定,但您已经采取了一些方法来使用 hosts 表解决此问题。

你想要的是这样的:

模型

user.rb

has_and_belongs_to_many :events

event.rb

has_and_belongs_to_many :users

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

users table
  name
  email

events table
  title
  address

events_hosts table
  user_id
  event_id

rails 约定是通过连接它要连接的表的两个名称来命名连接表 - 即主机之前的事件,连接在一起得到events_hosts

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

EventHost

belongs_to :user
belongs_to :event

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-05
    • 2014-09-12
    • 1970-01-01
    • 1970-01-01
    • 2012-03-24
    • 2016-07-23
    • 1970-01-01
    相关资源
    最近更新 更多