我尝试使用以下视图文件
列出数据库中特定表的值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"
请建议必要的更改
答案 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)删除该记录,您应该能够再次呈现该页面