1

私のレールアプリはこのエラーをスローしています:

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 に答える