如何在ruby on rails中编程到没有视图的模型DB的路由



我有一个网站,可以将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

我在这里看到了一些问题:

  1. 序列视图中的Form用GET发布到序列URL,该GET有一个空操作。所以它只是渲染序列视图。这就是你所看到的行为,也是你应该基于这一切的写作方式所期望的。

  2. 我在这里看不到任何视图会真正呈现@aa_data_bases的内容。您构建了什么视图来使用此控制器变量并显示生成的密码子集?这样的观点已经存在了吗?如果没有,则需要创建一个。

一些快速建议:

  1. 您的结果不是静态的,所以我会将序列页面从静态页面控制器中移出。你可能想要一个集成的搜索/结果页面,这样你的用户就可以轻松地进行搜索序列。首先将"/sequence"移位到AaDataBases#索引方法。添加一个将@aa_data_bases的值设置为空数组的基本索引方法。您可以选择将其配置为处理search查询参数。

  2. 将AaDataBasesController上的当前索引方法移动到创建方法,这样它就可以响应POST请求

  3. 如果不为空,请更改您创建的序列视图以显示基于@aa_data_bases的结果集,并更新表单以使用POST。

  4. 确保您的路线包括indexcreate路线。

这些更改应该会让您进入一组功能页面。

最新更新