我有一个网站,可以将DNA密码子翻译成MRNA密码子。我用sqlite创建了一个不可变的、不可变的64行数据库模型,其中有3列,然后我将其作为种子。基本上,我想要的是用户在文本区域中输入一个字符串,并将字符串分成3个字符串片段"ttcttaatt…"-->(dnaCodon)[ttc][tta][att]-->,这些字符串片段与数据库匹配,返回匹配的结果(mrnaCodon)[uuc][uua][auu]。我在我的一个静态页面上创建了一个搜索表单
我现在在搜索表单中的路线遇到了问题。我想查询搜索结果,然后将其返回到同一个页面或不同的页面,无论哪种方法更简单、更有意义。我最初在没有脚手架的情况下创建DB,因为我不希望用户可以对其进行修改。我最终创建了一个脚手架文件夹,所以我不知道为什么它没有连接到数据库。我的页面刷新但不返回数据库查询
app/controllers/aa_data_bases_controller.rb
class AaDataBases < ApplicationController
def index
@aa_data_bases = AaDataBases.new
end
def create
if params[:search]
@aa_data_bases = AaDataBases.search(params[:search]).order("created_at DESC")
else
@aa_data_bases = AaDataBases.all.order('created_at DESC')
end
end
结束
views/static_pages/sequence.html.erb正是在这个静态页面中,问题路径是form_tag("/sequence"。。。当我运行rails服务器时,页面加载,我可以输入,但页面刷新,什么都没发生
<% provide(:title, 'Sequence') %>
<h1>Sequence</h1>
<body>
<div class="content-container-1" id="div3">
<div class="container">
<div class="row text-center">
<h3>Add your sequence here</h3>
</div>
<div class="row text-center pt mb">
<div class="col-md-6 col-md-offset-3">
<br>
<%= form_tag("/sequence", :method => "AaDataBases#index", id: "search-form") do %>
<%= text_area_tag :search, params[:search], placeholder: "Translate DNA codons...",
:size =>"75x10", class: "form-control"%>
<% @aa_data_bases.each do |match| %>
<li><%= match.mrnaCodon %></li>
<% end %>
</div>
</div>
</div>
</div>
config/routes.rb
Rails.application.routes.draw do
root 'static_pages#home'
match '/about', to: 'static_pages#about', via: 'get'
match '/contact', to: 'static_pages#contact', via: 'get'
match '/help', to: 'static_pages#help', via: 'get'
match '/seqresults', to: 'static_pages#seqresults', via: 'get'
match '/sequence', to: 'sequence_page#sequence', via: 'get'
get 'aa_data_bases/index'
get 'aa_data_bases/create'
end
型号/aa_data_bases.rb
class AaDataBases < ActiveRecord::Base
def self.search(query)
where("%#{query}%")
end
end
数据库
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
我的种子文件,有64个条目和这个一样
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")
用于静态页面的控制器app/controllers/static_pages_controller.rb
class StaticPagesController < ApplicationController
def home
end
def help
end
def about
end
def contact
end
def seqresults
end
end
app/controllers/sequence_page_controller.rb
class SequencePageController < ApplicationController
def sequence
end
end
我在这里看到了一些问题:
-
序列视图中的Form用GET发布到序列URL,该GET有一个空操作。所以它只是渲染序列视图。这就是你所看到的行为,也是你应该基于这一切的写作方式所期望的。
-
我在这里看不到任何视图会真正呈现@aa_data_bases的内容。您构建了什么视图来使用此控制器变量并显示生成的密码子集?这样的观点已经存在了吗?如果没有,则需要创建一个。
一些快速建议:
-
您的结果不是静态的,所以我会将序列页面从静态页面控制器中移出。你可能想要一个集成的搜索/结果页面,这样你的用户就可以轻松地进行搜索序列。首先将"/sequence"移位到AaDataBases#索引方法。添加一个将@aa_data_bases的值设置为空数组的基本索引方法。您可以选择将其配置为处理
search
查询参数。 -
将AaDataBasesController上的当前索引方法移动到创建方法,这样它就可以响应POST请求
-
如果不为空,请更改您创建的序列视图以显示基于@aa_data_bases的结果集,并更新表单以使用POST。
-
确保您的路线包括
index
和create
路线。
这些更改应该会让您进入一组功能页面。