0

私はおもちゃのRailsアプリを構築しています。Post オブジェクトの足場を生成しました。ここで、スキャフォールドで生成されたビューに検索機能を追加したいと考えています。検索機能を追加するためにhttp://railscasts.com/episodes/37-simple-search-formに従っています。

app/views/posts/index.html.erb に追加します

<% form_tag posts_path, :method => 'get' do %>
  <p>
     <%= text_field_tag :search, params[:search]   %>
     <%= submit_tag "Search", :name => nil %>
  </p>
<% end %>

リストのコードが続きます。

controllers/posts_controller.rb には

class PostsController < ApplicationController
  # GET /posts
  # GET /posts.json
  def index
    @posts = Post.search(params[:search])
    respond_to do |format|
      format.html # index.html.erb
      format.json { render json: @posts }
    end
  end

model/post.rb には

class Post < ActiveRecord::Base
  attr_accessible :description, :image_url, :title
        validates :name, :presence => true
        validates :title, :presence => true,
                        :length => { :minimum => 5 }
  def self.search(search)
        if search
                find(:all, :conditions => ['name LIKE?', "%#{$search}%"])
        else
                find(:all)
        end
  end
end

サーバーを実行してもエラーは発生しませんが、フォームが表示されません。生成されたページのソースを見たところ、フォームがありません。何が起こっている?このような状況をデバッグする方法はありますか?

4

2 に答える 2

2

Rails 3 以降、form_tagヘルパー自体が生成する html を返します。等号が必要です。したがって、最初の行を次のように変更してください

<%= form_tag posts_path, :method => 'get' do %>

これは Rails 2 では異なりました。Railscasts のエピソードはかなり古いため、他の問題にも遭遇する可能性があります。

Rails APIも参照してください。

幸運を。

于 2012-05-22T05:58:34.433 に答える
0

OK、Simple Search Form in Rails 3 App not Displaying=によると、これがメソッドであることを示すために form_tagの前に が必要でした。

于 2012-05-22T05:55:01.287 に答える