Rails将表中的多个行的id链接到另一个表SQL中的单个行

时间:2016-01-06 07:48:37

标签: sql ruby-on-rails ruby

我制作了一个日历应用,用户可以在其中创建多个日历,并在Rails中为每个不同的日历添加多个条目。例如,我有下表

条目

id          description
----------------------------------------------------
1           go shopping
2           go to cinema
3           do homework

日历

id    entry_id      
----------------
1     1, 3
2     2
3     1, 2, 3

如果我想从日历中的一行(在数组中?)获取所有条目,那么该关联/解决方案是什么?如何在行中添加新条目? (我查看了has_and_belongs_to_many关联,但似乎需要第三个表,它不像指向一行的多个ID一样直接...)

1 个答案:

答案 0 :(得分:0)

如果你以后不想做疯狂的连接,你可能想要一个连接表。是的,第三张表是个好主意。

class Entry < ActiveRecord::Base
  has_many :calendars, through: :scheduling
end

class Calendar < ActiveRecord::Base
  has_many :entries, through: scheduling
end

class Scheduling < ActiveRecord::Base
  belongs_to :entry
  belongs_to :calendar
end

然后表格如下:

entires
  id:integer
  description:string

calendars
  id:integer

schedulings
  id:integer
  calendar_id:integer
  entry_id:integer

您的ActiveRecord查询如下所示:

Calendar.find(3).entries.ids  #=> [1, 2, 3]
Entry.find(1).calendars.ids   #=> [1, 3]

导轨指南也提供了一个很好的例子:

http://guides.rubyonrails.org/association_basics.html#choosing-between-has-many-through-and-has-and-belongs-to-many