首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >一个模型属于两个模型。

一个模型属于两个模型。
EN

Stack Overflow用户
提问于 2015-05-11 22:48:53
回答 2查看 973关注 0票数 0

我知道以前也有人问过类似的问题,但是找不到一个足够接近我需要的问题来学习如何做到这一点。

我有三个模特:婚礼、接待和与会者。

其想法是,用户将能够访问婚礼的活动页面,在那里,它将有一些信息,地址,和一个接待名单。用户将能够选择他们将要参加的招待会,插入他们的姓名和地址,然后作为参加婚礼的人插入数据库。

我最大的麻烦是把我的头绕在一个模型属于另外两个模型的想法上。即既属于婚礼模式又属于出席者模式的接待模式。

我该怎么做呢?

这是我的模式:

代码语言:javascript
运行
复制
create_table "attendees", force: :cascade do |t|
    t.string   "name",       limit: 255
    t.string   "address",    limit: 255
    t.integer  "people",     limit: 4
    t.string   "receptions", limit: 255
    t.datetime "created_at",             null: false
    t.datetime "updated_at",             null: false
end
create_table "events", force: :cascade do |t|
    t.string   "name",         limit: 255
    t.string   "slug",         limit: 255
    t.text     "description",  limit: 65535
    t.string   "address",      limit: 255
    t.float    "latitude",     limit: 24
    t.float    "longitude",    limit: 24
    t.datetime "start_time"
    t.datetime "end_time"
    t.boolean  "saved",        limit: 1,     default: false
    t.integer  "actable_id",   limit: 4
    t.string   "actable_type", limit: 255
    t.datetime "created_at",                                 null: false
    t.datetime "updated_at",                                 null: false
  end

  create_table "receptions", force: :cascade do |t|
    t.string   "address",    limit: 255
    t.float    "latitude",   limit: 24
    t.float    "longitude",  limit: 24
    t.integer  "wedding_id", limit: 4
    t.datetime "start_time"
    t.datetime "end_time"
    t.datetime "created_at",             null: false
    t.datetime "updated_at",             null: false
  end

add_index "receptions", ["wedding_id"], name: "fk_rails_40f4f8c049", using: :btree

create_table "weddings", force: :cascade do |t|
    t.string   "brides_name", limit: 255
    t.string   "grooms_name", limit: 255
    t.datetime "created_at",              null: false
    t.datetime "updated_at",              null: false
  end

  add_foreign_key "receptions", "weddings"

哦,我还有个活动桌。我使用ActiveRecord::ActsAs创业板使婚礼成为事件。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-11 23:32:56

Reception模型绝对不belong_to Attendee模型。

接待员和与会者之间的关系要么是has_many,要么是'has_many通过‘的关系。这是值得一读的全doco有关的问题。

你提到:

其想法是,用户将能够访问婚礼的活动页面,在那里,它将有一些信息,地址,和一个接待名单。用户将能够选择他们将要参加的招待会,插入他们的姓名和地址,然后作为参加婚礼的人插入数据库。

为了澄清我们在正确的页面上,一场婚礼会有多个招待会,这是真的吗?一位客人可以选择他们要参加的多场招待会中的哪一场?所以一位客人可以参加3场婚礼中的2场,参加一场婚礼?那婚礼本身呢?客人可以参加一些招待会,但不能参加相关的婚礼吗?或者,如果他们参加了任何一个招待会,是否会自动假定他们也会参加婚礼?

你如何确定某个特定的人是否被邀请参加婚礼?我可以浏览你的网站,并列出自己作为一个出席的几个招待会,不请自来?

你描述数据模型的方式似乎有些不对劲--至少,你描述的数据结构与我们都习惯的婚礼不匹配。你很可能对此有充分的理由。如果是这样的话,用更多的背景信息来更新你的问题,比如你想要解决的潜在问题,以及你想要模拟的现实情况。它能让人们更容易地帮助你。

更新:这应该有效。

代码语言:javascript
运行
复制
# wedding.rb
has_many :receptions

# reception.rb
belongs_to :wedding
has_many :attendees, through: :reception_attendees

# attendee.rb
belongs_to :wedding
has_many :receptions, through: :reception_attendees

# reception_attendee.rb
belongs_to :reception
belongs_to :attendee

所以你需要与会者和接待员之间的“有很多”的关系。这意味着您将需要一个新的模型和数据库表reception_attendees,它将是接待员和与会者之间的链接表。

票数 1
EN

Stack Overflow用户

发布于 2015-05-11 23:41:22

我认为这些关系是可行的:

代码语言:javascript
运行
复制
# wedding.rb
has_many :attendees
has_one :reception

# attendee.rb
belongs_to :wedding
belongs_to :reception

# reception.rb
belongs_to :wedding
has_many :attendees
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30178893

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档