Univ #index中的ActionController :: UrlGenerationError

时间:2014-05-19 19:40:17

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-4

我尝试使用以下视图文件

列出数据库中特定表的值

index.html.erb

<%= form_tag univ_path, method: :get do %>
  <p>
    <%= text_field_tag :query, params[:query] %>
    <%= submit_tag "Search", name: nil %>
  </p>
<% end %>


<h1>List of Universities based on ranking</h1>
<div id="articles">
  <% @univ.each do |univ| %>
    <h2>
      <%= link_to univ.univ_name, univ %>
    </h2>
    <div class="info">
      <b>Location:</b> <%= univ.location %>, <%= univ.state %> <br/>
    </div>
    <br /><br />

    <div class="content"><p><%= univ.description %><p></div>
  <% end %>
</div>

,控制器文件如下

univ_controller.rb

class UnivController < ApplicationController

  def index
    if params[:query].present?      
      @univ= Univ.search(params[:query])
    else
      @univ=Univ.all
    end
  end

  def show
    @univ= Univ.find(params[:id])
  end

  def register
    @univ = Univ.new(params[:univ])
    if(request.post? and @univ.save)
      flash[:notice]= "Account Created Successfully"
      redirect_to :controller => 'univ', :action => 'register'
    end
  end
end

我能够从db列出表的内容。但是,当我包含用于实现搜索的form_tag时,会导致错误

No route matches {:action=>"show", :controller=>"univ"} missing required keys: [:id]

我的routes.rb有

resources :univ get 'search' => "univ#index", :as => "search"

请建议必要的更改

2 个答案:

答案 0 :(得分:1)

更改form_for中的index.html.erb,如下所示:

<%= form_tag search_path, method: :get do %>

我认为您打算使用search路由提交索引操作表单,该路由定义为:

get 'search' => "univ#index", :as => "search"

为此,您必须在search_path上提交表单。

您收到错误为No route matches {:action=>"show", :controller=>"univ"} missing required keys: [:id],因为目前您正在univ_path上提交表单,该表单将转到show操作,因此需要id

答案 1 :(得分:0)

我刚刚处理了一个正在处理的项目的问题,结果发现它是我数据库中的Nil字段。你是否将数据保存到ruby sqlite?检查具有nil [:id]的记录并使用Model.destroy(id)删除该记录,您应该能够再次呈现该页面