【问题标题】:Query a SQlite generated model database and returning matched query results?查询 SQlite 生成的模型数据库并返回匹配的查询结果?
【发布时间】:2015-04-20 00:22:26
【问题描述】:

抱歉这个菜鸟问题,我对 RoR 有一些经验。为了快速了解背景,我想创建一个网站,将氨基酸转换为其匹配的 mRNA 密码子。我需要一个具有 3 列的固定、不可变的 64 行数据库。基本上,我想要的是用户将字符串输入到文本区域并将字符串分成3个字符串片段“ttcttaatt ...”-->(dnaCodon)[ttc][tta][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

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

<% 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:“异亮氨酸”,dnaCodon:“atc”,mrnaCodon:“auc”,created_at:“2015-04-05 15:57:47”,updated_at:“2015-04-05 15:57 :47"]

【问题讨论】:

  • 请发布您目前拥有的代码。
  • 和你的数据库结构
  • @Jordan 正如我所说,我将数据库创建为模型,但它缺少视图和控制器。我希望数据库对用户保持隐藏。
  • @peter 添加了额外的代码

标签: ruby database sqlite model-view-controller


【解决方案1】:

您可以使用这样的哈希进行精确匹配。 || 之间的单词mnra是后面块的参数,你可以自己命名。这里它代表数据库查询的结果,所以它代表对象形式的记录。数据库字段成为对象的成员。我建议您看一下有关 Activerecord 的教程,例如来自 Rails 本身的 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"]

【讨论】:

  • 这是我要添加到数据库模型文件中的东西,还是我会为此创建一个控制器来工作?
  • 通常不在模型中,否则你可以在你想要的地方使用它
  • 抱歉,您能否更具体地说明要将其添加到哪个文件?还有 |mrna| 到底是什么?换句话说,为什么不是mrnaCodon来​​匹配列名?
  • 关于放置代码的位置,我找到了这篇好文章codefol.io/posts/Where-Do-I-Put-My-Code,我会在回复中添加一些其他内容
  • 我最终将您提供给我的 ruby​​ 代码嵌入到一个 HTML 文件中,只是为了测试它是否可以访问数据库,并且确实如此!我决定退后一步,弄清楚搜索表单是如何工作的,因为我仍然需要输入一个字符串块并将其分成 3char 组。但除此之外,您提供的代码可用于访问数据库并返回查询。非常感谢
猜你喜欢
  • 2016-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-11
  • 2016-09-03
  • 1970-01-01
相关资源
最近更新 更多