1

我的 Rails 应用程序抛出此错误:

为 nil 调用 id,它会错误地为 4 - 如果你真的想要 nil 的 id,请使用 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>

我相信问题出在搜索未初始化,但我不知道该怎么做。

4

1 回答 1

1

当你这样做

<% form_for @search do |f| %>

它期望 @search 是一个初始化的活动记录对象,其路由在 routes.rb 文件中定义。

我假设您遇到的问题是在对 OmMatch 搜索操作执行 GET 请求时。

如果搜索是您可以初始化的对象,则只需添加

@search = Search.new

到您的控制器。

您需要考虑此处的工作流程,了解当通过链接请求表单时运行什么操作,以及当用户发布表单时会发生什么。

请记住,您可以运行

rake routes

查看应用程序知道的资源和控制器的所有路由。

我建议您查看 railscasts 的屏幕截图,尤其是关于路由的屏幕截图。了解控制器代码如何通过 url 映射非常重要。http://railscasts.com/episodes?search=routing 正确映射路由并了解何时调用每个操作后,您可以确保在需要对象之前创建对象。

于 2010-02-07T18:28:23.947 回答