【问题标题】:search form doesn't show up搜索表单不显示
【发布时间】:2012-05-22 05:50:01
【问题描述】:

我正在构建一个玩具 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

当我运行服务器时,我没有收到任何错误,但没有显示表单。我查看了生成的页面源,那里没有表单。到底是怎么回事?有没有办法调试这样的情况?

【问题讨论】:

    标签: html ruby-on-rails ruby ruby-on-rails-3


    【解决方案1】:

    从 Rails 3 开始,form_tag 助手本身会返回它生成的 html。需要等号。所以请将第一行改为

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

    Rails 2 中的情况有所不同。由于 railscasts 情节已经很老了,您也可能会遇到其他问题。

    也请参阅the Rails API

    祝你好运。

    【讨论】:

      【解决方案2】:

      好的,根据Simple Search Form in Rails 3 App not Displaying,我需要在form_tag前加上=来表明这是一个方法。

      【讨论】: