Проблема с получением базового кода плагина searchlogic для работы в Rails App
Мое приложение 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 ответ
Когда вы делаете
<% form_for @search do |f| %>
Ожидается, что @search будет инициализированным объектом активной записи с маршрутами, определенными в файле rout.rb.
Я предполагаю, что проблема у вас возникает при выполнении запроса GET к поисковому действию OmMatch.
Если поиск - это объект, который вы можете инициализировать, просто добавьте
@search = Search.new
к вашему контроллеру.
Здесь необходимо рассмотреть рабочий процесс для того, какое действие запускается, когда форма запрашивается по ссылке, и что происходит, когда пользователь публикует форму.
Помните, что вы можете бежать
rake routes
чтобы увидеть все маршруты, которые знает ваше приложение для ваших ресурсов и контроллеров.
Я бы порекомендовал вам проверить снимки экрана Railscasts, особенно те, которые касаются маршрутизации. Очень важно, чтобы вы понимали, как код вашего контроллера отображается с помощью URL. http://railscasts.com/episodes?search=routing После того, как вы правильно сопоставили свои маршруты и поняли, когда будет выполняться каждое действие, вы можете убедиться, что ваши объекты созданы, прежде чем они вам понадобятся.