Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails需要改进这个数据模型_Ruby On Rails_Ruby_Database_Database Design_Data Modeling - Fatal编程技术网

Ruby on rails Rails需要改进这个数据模型

Ruby on rails Rails需要改进这个数据模型,ruby-on-rails,ruby,database,database-design,data-modeling,Ruby On Rails,Ruby,Database,Database Design,Data Modeling,我正在尝试为rails应用程序创建一个数据模型 基本上,我有一个位置表,其中包含四个不同位置的记录。我试图为每天的每个地点创建时间段。例如位置1有5个9am插槽、5个11am插槽等 我现在需要能够为给定的时间段创建位置安排 目前我有这个应用程序工作,唯一的问题是,当你保存一个安排时,你还必须用安排id更新一个时间段记录,并且每天每个地点的每个时间段都必须存在一个记录 我知道一定有更好的办法 以下是我当前的数据模型: 以下是我当前的模型设置: class Location < Active

我正在尝试为rails应用程序创建一个数据模型

基本上,我有一个位置表,其中包含四个不同位置的记录。我试图为每天的每个地点创建时间段。例如位置1有5个9am插槽、5个11am插槽等

我现在需要能够为给定的时间段创建位置安排

目前我有这个应用程序工作,唯一的问题是,当你保存一个安排时,你还必须用安排id更新一个时间段记录,并且每天每个地点的每个时间段都必须存在一个记录

我知道一定有更好的办法

以下是我当前的数据模型:

以下是我当前的模型设置:

class Location < ActiveRecord::Base
    has_one :arrangement
    has_many :timeslots
end

class Timeslot < ActiveRecord::Base
    belongs_to :location
    has_one :arrangement
end

class Arrangement < ActiveRecord::Base
    belongs_to :location
    belongs_to :timeslot
end
如何使此数据模型更好

编辑 理想情况下,我正在寻找一个数据模型,在该模型中,我不必为每个位置和每天填充时间段

理论上,我希望有一个只有每个位置的所有时隙的时隙表,这样我就不必手动填充时隙表


我最担心的事情是必须填充未来30年的时间段表。

由于您将假设为每个位置生成一些时间段,因此这将部分起作用:

class Location < ActiveRecord::Base
    has_many :timeslots
    has_many :arrangements, :through => :timeslots
end

class Timeslot < ActiveRecord::Base
    belongs_to :location
    has_one :arrangement
end

class Arrangement < ActiveRecord::Base
    belongs_to :timeslot
end
类位置:时间段
结束
类时隙
设置此项的问题在于,由于无法通过关系创建一个
归属,因此无法正常
获取排列位置。 但是你基本上可以做
排列.timeslot.user
,而不是与
位置建立归属关系,这有点多余,但你也可以这样做

您不需要在关系的一端设置id:


您是否确实需要在
位置
安排
之间建立直接关联?我会考虑使用一个关联来组织它,比如:

class Location < ActiveRecord::Base
    has_many :timeslots
    has_many :arrangements, through: :timeslots
end

class Timeslot < ActiveRecord::Base
    belongs_to :location
    has_one :arrangement
end

class Arrangement < ActiveRecord::Base
    belongs_to :timeslot
end
类位置
如果这样做,您将创建一个属于
时隙的
安排
,因此不需要手动更新该安排。如果要获取
位置的所有
安排
,仍然可以使用
位置.安排
,因为您通过时隙设置了关联。如果您需要知道安排的位置,您可以使用
arrangement.timeslot.location


(注意,我假设每个
位置
实际上可以有多个
排列
s,并且
在你的问题中有一个
是错误的?如果我在这方面错了,请告诉我。)

是的,你是对的,每个位置都可以有多个排列。酷,这更有意义:)最终,您可能可以完全取消
时隙
模型,这取决于您是否需要对其进行其他操作。至少,如果您不想提前创建所有插槽,您只能在有安排的情况下创建一个,并通过
位置
模型限制任何插槽的数量。请查看我的解决方案,看看它是否对您有意义。Thanks@Zippie ? 打字错误是什么?如果你选择的是散列语法,两者都是正确的(我只是倾向于使用1.9样式,只要我所有的键都是符号)。哦,对不起,我不知道:)如果你有更多关于如何管理时间段的信息可能会有所帮助。例如,您当前如何跟踪一个位置可以有多少个时隙,以及如何跟踪a
timeslot
用于哪个时隙?每个位置是否都有相同的时隙?不,它们都有不同的时隙。例如,location1有5个上午9点的插槽,5个上午11点的插槽,等等。location2每个插槽只有2个。好的,对不起,当时我没有意识到,这改变了我的观点,但我意识到它几乎与Zaids相同。记住不要把arrangement_id列放在timeslot表中。我的理想解决方案是不必为每天的每个位置生成时间段。我想要一个时间段表,每个时间段的每个位置都有一条记录,这样我就不必指定x年数的时间段了。为什么不试着在没有
时间段
表的情况下创建一个
位置
排列
表呢。当用户想要进行
排列
时,您会给他一个下拉列表,根据他选择的
位置来选择
排列
的时间。这样行吗?因为我需要将每个位置限制为特定的时间段数。例如,位置1各有5个,位置2各有2个。另外,当使用一个时隙时,我不想在可用时隙的下拉列表中显示它。
class Location < ActiveRecord::Base
    has_many :timeslots
    has_many :arrangements, through: :timeslots
end

class Timeslot < ActiveRecord::Base
    belongs_to :location
    has_one :arrangement
end

class Arrangement < ActiveRecord::Base
    belongs_to :timeslot
end