查询SQlite生成的模型数据库并返回匹配的查询结果?

时间:2015-04-20 00:22:26

标签: ruby database sqlite model-view-controller

对于noob问题我很抱歉,我对RoR有一些经验。为了快速了解背景,我想建立一个网站,将氨基酸转换为匹配的mRNA密码子。我需要一个固定的,不可变的64行数据库,有3列。基本上,我想要的是用户将字符串输入到文本区域并将字符串分成3个字符串片段“ttcttaatt ...” - > (dnaCodon)[ttc] [att] - >匹配数据库返回匹配的结果(mrnaCodon)[uuc] [uua] [auu]。

我现在的问题是,我不希望用户可以查看此数据库,因此它全部包含在后端。我已经把我的数据库作为一个模型,所以它是隐藏的。如何将数据库作为模型进行查询,然后进行模式匹配?

这是迁移文件

class CreateAaDataBases < ActiveRecord::Migration
  def change
   create_table :aa_data_bases do |t|
  t.string :aaFullName
  t.string :dnaCodon
  t.string :mrnaCodon

  t.timestamps
  end
 end
end

这是我在seeds.rb文件中创建和迁移的数据库

AaDataBases.create(aaFullName: "phenylalanine", dnaCodon:"ttt", mrnaCodon:"uuu")
AaDataBases.create(aaFullName: "phenylalanine",dnaCodon:"ttc",mrnaCodon:"uuc")
AaDataBases.create(aaFullName: "leucine", dnaCodon:"tta", mrnaCodon:"uua")
AaDataBases.create(aaFullName: "leucine", dnaCodon:"ttg", mrnaCodon:"uug")
AaDataBases.create(aaFullName: "leucine", dnaCodon:"ctt", mrnaCodon:"cuu")
AaDataBases.create(aaFullName: "leucine", dnaCodon:"ctc", mrnaCodon:"cuc")
AaDataBases.create(aaFullName: "leucine", dnaCodon:"cta", mrnaCodon:"cua")
AaDataBases.create(aaFullName: "leucine", dnaCodon:"ctg", mrnaCodon:"cug")
AaDataBases.create(aaFullName: "isoleucine", dnaCodon:"att", mrnaCodon:"auu")
AaDataBases.create(aaFullName: "isoleucine", dnaCodon:"atc", mrnaCodon:"auc")

还有另外54个条目以这种方式继续。

这是我的AaDataBases模型文件,我还没有添加任何东西。

class AaDataBases < ActiveRecord::Base
end

这是一个用于查询和返回序列的静态页面视图,在评论建议之后尝试了此操作,并从模型中省略了代码。一个简单的测试,看看是否可以访问db并返回匹配的值。

<% provide(:title, 'Sequence Results') %>
     <h1>Sequence Results</h1>

    <%= AaDataBases.where(dnaCodon: 'atc').each do |mrna| 
       puts mrna.aaFullName, mrna.mrnaCodon 
     end %>

测试输出此页面视图。 [AaDataBases id:10,aaFullName:“isoleucine”,dnaCodon:“atc”,mrnaCodon:“auc”,created_at:“2015-04-05 15:57:47”,updated_at:“2015-04-05 15:57 :47" ]

1 个答案:

答案 0 :(得分:0)

您可以使用这样的哈希进行精确匹配。 ||之间的单词mnra是后面的块的参数,您可以自己命名。这里它表示数据库查询的结果,因此它表示对象表单中的记录。数据库字段成为对象的成员。我建议你看一下Rails本身的关于Activerecord的教程,比如this

AaDataBases.where(mrnaCodon: 'auc').each do |mrna|
  puts mnra.aaFullName, mnra.mnraCodon
end

或者如果你的意思是我匹配一个小丑你可以做到这一点

AaDataBases.where('mnraCodon like _u_').each do |mrna|
 ..
end

AaDataBases.where('mnraCodon like %u%').each do |mrna|
 ..
end

修改

将字符串切成碎片很容易就像这样

string = "uuuuucttauuattguug"
p string.scan(/.{3}/)

给出

["uuu", "uuc", "tta", "uua", "ttg", "uug"]