我的rails应用程序抛出此错误:
调用id为nil,错误地为4 - 如果你真的想要id为nil,请使用object_id
我正在尝试制作一个基本表单,允许用户按“国家/地区”搜索“匹配”。这只是我仍在学习的概念证明。
这是我的模特:
class OmMatch < ActiveRecord::Base
end
这是我的控制器:
class OmMatchesController < ApplicationController
def search
@search = OmMatch.search(params[:search])
@match = @search.all
end
end
以下是观点:
<html>
<head><title>"Matches"</title></head>
<body>
<% form_for @search do |f| %>
<p>
<%= f.label :country_equals, "Country" %><br />
<%= f.text_field :country_equals %>
</p>
<p>
<%= f.submit "Submit" %>
</p>
<% end %>
<table>
<tr>
<th>"Match Name"</th>
<th>"Country"</th>
</tr>
<% @match.each do |match| %>
<tr>
<td><%=h match.matchname %></td>
<td><%=h match.country %></td>
</tr>
<% end %>
<table>
</body>
</html>
我认为问题来自于搜索没有被初始化,但我不知道该怎么做。
答案 0 :(得分:1)
当你这样做时
<% form_for @search do |f| %>
期望@search成为初始化的活动记录对象,其路由在routes.rb文件中定义。
我认为您遇到的问题是在对OmMatch搜索操作执行GET请求时。
如果搜索是您可以初始化的对象,则只需添加
@search = Search.new
到您的控制器。
您需要在此处考虑工作流程,以了解通过链接请求表单时运行的操作,以及用户发布表单时发生的情况。
请记住,您可以运行
rake routes
查看应用程序了解资源和控制器的所有路由。
我建议您查看railscasts屏幕演员,尤其是路由选项。了解url如何映射控制器代码非常重要。 http://railscasts.com/episodes?search=routing一旦正确映射了路由,并了解何时将调用每个操作,您可以确保在需要之前创建对象。