【发布时间】:2014-09-18 15:13:25
【问题描述】:
我正在使用 Rails 开发电子学习,我想将一组数组保存到数据库中,目的是跟踪用户在电子学习各个部分的进度。
我遇到过这个问题和答案:
Storing arrays in database : JSON vs. serialized array
...听起来它可能很有用,但我不知道如何将它集成到我正在开发的 Rails 项目中。
鉴于我几乎是 Rails 菜鸟,有人可以用简单的英语(或者简单的代码)向我解释我会如何:
a) 将一个数组保存到数据库中,该数组在用户最初注册时保存一系列“假”布尔值。
b) 在整个电子学习过程中从各个页面检索和更新该数组。
我会列出我尝试过的东西,但这只是在黑暗中的狂野刺伤,我真的不知道从哪里开始。注释类应该保存在控制器文件夹中吗?或者,在我的示例中,它实际上是 User 类(类似地,它扩展了 ActiveRecord)?
再次感谢任何帮助(最好是解释代码所属的位置)。
更新
我被要求更具体,所以我会尝试:
我在数据库中有一个用户表,其中(可以预见)有几个字段,包括电子邮件、用户名等。我想在用户表中再添加 5 个字段,每个字段都存储一个数组来跟踪用户在每个字段中的进度5个部分。我设想,当用户打开一段内容时,数组将被更新,并且相应的索引将被更新为“真”以标记该部分的该部分已完成。
希望对你有帮助……
重新更新
当用户第一次注册时,我希望用一系列“假”布尔值设置数组。我将从哪个文件设置数组?这是在用户中完成的吗?目前我正在尝试这个,但我认为没有设置值 - 尽管它没有引发错误。
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
serialize :leadership_styles_progress
serialize :skills_progress
serialize :safeguarding_progress
serialize :tools_progress
before_create :set_progress_vars
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
validates :age, presence: { :message => ": Please choose your age" }
validates :section, presence: { :message => ": Please choose the section you belong to"}
has_many :posts
private
def set_progress_vars
self.leadership_styles_progress = [false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false]
self.skills_progress = [false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false]
self.safeguarding_progress = [false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false]
self.tools_progress = [false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false]
end
end
我还通过“rake routes”检查了哪些路线被映射到哪里; users/sign_up 映射到 devise/registrations/new。那么下面建议的序列化代码会去那里吗?
【问题讨论】:
-
你能试着解释清楚一点吗?用户的课程有很多页面,您想存储他们访问过的页面吗?理想情况下,只有相关表的某种形式的简单数据库结构会很有用
-
您(或将来)是否需要查询此数组?如果是这样,那么
serialize就是你的敌人,你最好在列表中使用单独的列或单独的表格。 -
当用户登录(而不是注册)时,我需要反序列化数组并将其加载到局部变量中(我假设)。当他们查看新内容时,我将要更新数据库上的数组。 '序列化'可以吗?
标签: ruby-on-rails ruby arrays serialization deserialization