【问题标题】:I want to put string and array data in sqlite3 in ruby on rails我想将字符串和数组数据放在 ruby​​ on rails 的 sqlite3 中
【发布时间】:2015-08-28 06:58:26
【问题描述】:

您好,我是编程新手,但我尝试制作自己的服务

我正在使用 cloud9 Ide、ruby on rails 和 sqlite3

不管怎样,我会解析字典的数据,我将要设计这样的数据库(仅作为示例)

        [col-1] [col-2] [col-3]
[row-1]  fruit   apple  [a,p,p,l,e]
[row-2]  fruit  kiwi    [k,i,w,i]
   ...
[row-50] flower  lily   [l,i,l,y]
[row-51] flower  rose   [r,o,s,e]
  ...

3 列和数千行

为了给你更多细节,当用户在文本区域输入“fruit”时,我想显示从“apple”到“kiwi”的单词列表!!

我学会了存储只有用户这样提交的“字符串”

class CreateFans < ActiveRecord::Migration
  def change
    create_table :fans do |t|

      t.string :username

      t.timestamps null: false
    end
  end
end

但我真的不知道如何存储自己的数据
我想知道如何添加列和行以及存储本地数据,而不是用户输入!

实际上,我昨天研究了阅读 .xlsx 文件并通过 gem 'roo' 在 ruby​​ on rails 中显示,但我不知道如何在数据库中正确使用它。我想知道还有其他选择...

感谢您阅读我的问题,如果您给我建议,我将不胜感激:)

【问题讨论】:

标签: ruby-on-rails database sqlite cloud9-ide


【解决方案1】:

您可以通过迁移向数据库添加列。

不必只能来自用户输入。

例如,您可以进行迁移...

class CreateMyWord < ActiveRecord::Migration
  def change
    create_table :my_words do |t|
      t.string :genre
      t.string :word
      t.string :letters
      t.timestamps null: false
    end
  end
end

当你定义你的模型时,你指定属性letters实际上是一个数组...

class MyWord < ActiveRecord::Base
  serialize :letters
end

serialize 在存储记录时会自动将数组转换为字符串表示,在检索记录时会自动将其转换回来。

然后您可以自己在seeds.db 文件中填充表格,您可以使用命令rake db:seed 执行该文件

种子数据库可能看起来像...

my_initial_words = [
                    ['fruit', 'apple', ['a','p','p','l','e'],
                    ['fruit', 'kiwi', ['k','i', 'w', 'i'],
                    ...
                   ]

my_iniital_words.each do |word_data|
  MyWord.create(genre: word_data[0], word: word_data[1], letters: word_data[2])
end

请注意,如果单词always的字母与单词匹配,则您实际上不需要数据库中的列letters,只需在模型中创建一个创建字母数组的方法在您需要时为您服务。

class MyWord < ActiveRecord::Base
  def letters
    word.split('')
  end
end

【讨论】:

  • 感谢您的回答!!我可以再问一个问题吗?当用户提交“花”(第 1 列的字符串)时,我想显示第 2 列(苹果,猕猴桃,...)的数据作为结果。如何只返回第 2 列的数据??
  • 有一个 ActiveRecord where 子句,它返回一个符合条件的记录集合......非常像一个记录数组。如果您执行@my_words = Word.where(genre: 'flower'),则@my_words 包含genre 中所有带有“flower”的记录。要仅获取第 2 列值的数组,您可以执行 @words = @my_words.map{|mw| mw.word}
  • 非常感谢!!
猜你喜欢
  • 2015-07-16
  • 1970-01-01
  • 2017-09-12
  • 1970-01-01
  • 2016-11-29
  • 2018-06-08
  • 2013-01-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多