无法在Rails App中使用基本的searchlogic插件代码

时间:2010-02-07 03:16:34

标签: ruby-on-rails searchlogic form-for

我的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>

我认为问题来自于搜索没有被初始化,但我不知道该怎么做。

1 个答案:

答案 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一旦正确映射了路由,并了解何时将调用每个操作,您可以确保在需要之前创建对象。