我正在构建一个玩具Rails应用程序。我为Post对象生成了一个脚手架。现在,我想在scaffold生成的视图中添加一些搜索功能。我正在关注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
当我运行服务器时,我没有收到任何错误,但表单没有显示。我查看了生成的页面源代码,那里没有表单。到底是怎么回事?有没有办法调试这些情况?
答案 0 :(得分:2)
从Rails 3开始,form_tag
助手本身会返回它产生的html。需要等号。所以请将第一行更改为
<%= form_tag posts_path, :method => 'get' do %>
这在Rails 2中有所不同。由于railscasts剧集很老,你可能会遇到其他问题。
同样请参阅the Rails API。
祝你好运。答案 1 :(得分:0)
好的,根据Simple Search Form in Rails 3 App not Displaying,我在form_tag之前需要=
来表示这是一种方法。