【问题标题】:How to program routes to a model DB without a view in ruby on rails?如何在没有 ruby​​ on rails 视图的情况下对模型 DB 的路由进行编程?
【发布时间】:2015-04-25 16:36:13
【问题描述】:

我有一个将 DNA 密码子翻译成 MRNA 密码子的网站。我用 sqlite 创建了一个不可变的 64 行数据库模型,它有 3 列,然后我开始播种。基本上,我想要的是用户将字符串输入到文本区域并将字符串分成3个字符串片段“ttcttaatt ...”-->(dnaCodon)[ttc][tta][att]-->匹配到返回匹配结果的数据库 (mrnaCodon) [uuc] [uua] [auu]。我在我的一个静态页面上创建了一个搜索表单

我现在在搜索表单中遇到了我的路线问题。我想查询搜索,然后将其返回到同一页面或不同的页面——无论哪种方法更容易且更有意义。我最初在没有脚手架的情况下创建了我的数据库,因为我不希望用户可以访问它以进行更改。我最终创建了一个脚手架文件夹,所以我不知道为什么它没有连接到数据库。我的页面刷新但没有返回数据库查询

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 server 页面加载时,我可以输入但页面刷新并且没有任何反应

<% 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

【问题讨论】:

  • /sequence 方法路由到static_pages 控制器的sequence 操作。但是,您已经共享了@98​​7654332@ 的代码。请分享 static_pages 控制器的代码。
  • @UtsavKesharwani 添加了 static_pages 控制器

标签: ruby-on-rails ruby sqlite model-view-controller


【解决方案1】:

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

  1. 序列视图中的表单使用 GET 发布到序列 URL,该 GET 具有一个空操作。所以它只是渲染序列视图。这是您所看到的行为,并且根据这一切的编写方式,这是您应该期待的。

  2. 我在这里看不到任何实际呈现@aa_data_bases 内容的视图。您构建了哪个视图来使用此控制器变量并显示生成的密码子集?这种观点是否已经存在?如果没有,您将需要创建一个。

一些快速建议:

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

  2. 将 AaDataBasesController 上的当前索引方法移动到 create 方法,以便它可以响应 POST 请求

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

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

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

【讨论】:

  • 进行了一些编辑,但是您提出的一些建议超出了我的想象。您能否提供进一步的指导?
  • 请帮忙?添加了更改
猜你喜欢
  • 2012-04-06
  • 2015-12-19
  • 2014-10-24
  • 2013-01-02
  • 2014-09-17
  • 2010-10-23
  • 1970-01-01
  • 2013-10-04
  • 1970-01-01
相关资源
最近更新 更多