Rails在数据库中存储数组

时间:2014-09-01 02:02:43

标签: sql ruby-on-rails

我需要在我的rails语言学习应用程序中保留一个数组。以下是我需要这样做的情况/原因(如果有更好的方法请告诉我)。用户被呈现,一次一个,10个单词学习。在学会了这些单词之后,他们会在同一组10个单词上进行评估。

对于'测验'部分我想随机化单词出现的顺序(例如:目前如果你学习单词1.fish 2.cat 3.dog ...你将按相同的顺序查询1.fish 2.cat 3。狗...这可以使测验更容易。

我需要坚持下去以防用户注销或导航。在这种情况下,我想让他们回到他们在测验中留下的确切词。

这是我目前拥有的控制器代码:

def index 
  .
  .
  @quiz = Lang.limit(10).offset(current_user.bookmark - 11)  
  exercise_bank
  .
  .    
end

private
  def exercise_bank
    current_user.random_exercise_array = (0..9).step(1).shuffle
    current_user.save
    @index2 = current_user.random_exercise_array[@index] 
    #@index starts at 0 and increments on each call to index action
    #@index2 grabs the random number and uses it to reference a word in @quiz
    #something like this: @quiz[@index2].spanish_to_english---grabs a english word
  end
end

以上的想法是选择一个随机数0-9并用它来引用我的数据库中的一个单词。上面的结果类似于我的数据库中的random_exercise_array属性:

random_exercise_array: "---\n- 6\n- 0\n- 1\n- 7\n- 8\n- 5\n- 9\n- 3\n- 2\n- 4\n"

以下是相关的用户数据库代码:

class DeviseCreateUsers < ActiveRecord::Migration
  serialize :random_exercise_array
end

相关迁移文件:

class AddRandomExerciseArrayToUsers < ActiveRecord::Migration
  def change
    add_column :users, :random_exercise_array, :text
  end
end

这是解决此问题的最佳方法吗?如果是这样,你能解释一下如何从random_exercise_array中取回一个没有所有( - )和(\ n&#39;)s的整数吗?

1 个答案:

答案 0 :(得分:0)

如果要从数据库文本列中获取数组,则应在用户模型中声明类型,如下所示:

class DeviseCreateUsers < ActiveRecord::Base  #why your original code inherit from ActiveRecord::Migration?
  serialize :random_exercise_array, Array
end

然后您可以使用current_user.random_exercise_array作为数组而不是字符串。