gpt4 book ai didi

ruby-on-rails - 多日期选择器的 Rails 数据设计

转载 作者:搜寻专家 更新时间:2023-10-30 23:19:49 25 4
gpt4 key购买 nike

我有一个约会模型,其可用日期可以包含多个日期(例如,1 月 1 日、5 日、6 日和 7 日可用)。

我的问题很基本:我应该如何存储每个事件的可用日期?

我能想到的是一个包含两列的 Avaiable_Dates 表:event_id 和 date。每个事件都有多行,每行一个日期。查询整个表以确保我们获得事件的所有日期似乎很麻烦。哈希 {event => {date1, date2, date3}} 会更快,但我不知道如何使用 ActiveRecord 实现它。

谢谢。

最佳答案

仅在可用时间使用单独的模型可能不是一个坏主意,但如果您决定采用散列路线,则可以使用 serialize 关键字来实现。您必须告诉 ActiveRecord 序列化变量,然后它会在您访问哈希时自动执行序列化和反序列化。

Saving arrays, hashes, and other non-mappable objects in text columns

Active Record can serialize any object in text columns using YAML. To do so, you must specify this with a call to the class method serialize. This makes it possible to store arrays, hashes, and other non-mappable objects without doing any additional work.

class User < ActiveRecord::Base
serialize :preferences
end

user = User.create(:preferences => { "background" => "black", "display" => large })
User.find(user.id).preferences # => { "background" => "black", "display" => large }

You can also specify a class option as the second parameter that’ll raise an exception if a serialized object is retrieved as a descendant of a class not in the hierarchy.

class User < ActiveRecord::Base
serialize :preferences, Hash
end

user = User.create(:preferences => %w( one two three ))
User.find(user.id).preferences # raises SerializationTypeMismatch

When you specify a class option, the default value for that attribute will be a new instance of that class.

class User < ActiveRecord::Base
serialize :preferences, OpenStruct
end

user = User.new
user.preferences.theme_color = "red"

来自 rubyonrails.org

从设计的角度来看,如果您认为您将向可用时间对象添加任何更多数据,那么您应该使它成为自己的模型。否则,序列化哈希似乎没问题。

关于ruby-on-rails - 多日期选择器的 Rails 数据设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7801921/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com