我正在尝试实现一个简单的搜索表单,在数据库中搜索正在搜索其内容的关键字。
我的观点有这样的形式:
<%= form_tag search_keywords_path, :method => 'get' do %>
<%= text_field_tag :search, params[:search] %>
<%= submit_tag "Search", :name => nil %>
<% end %>
我的控制器有这些:
def search
@keywords = Keyword.search(params[:search])
end
def show
@keyword = Keyword.find(params[:id])
respond_to do |format|
format.html # show.html.erb
format.json { render json: @keyword }
end
end
模型keyword.rb:
def self.search(search)
if search
Rails.logger.debug("debug::Searching for" + search)
@keyword = Keyword.find_all_by_content(search)
end
end
现在,每当我尝试运行搜索时,都会收到此错误:
关键字控制器#show中的ActiveRecord :: RecordNotFound 找不到关键字id = search
根据我的理解,有些东西搞乱了show方法,但我不明白为什么或如何解决它。任何帮助将不胜感激。
答案 0 :(得分:0)
在你的keyword.rb
中替换
@keyword = Keyword.find_all_by_content(search)
用,
@keyword = Keyword.find_all_by_content("#{search}")
答案 1 :(得分:0)
我认为您尚未添加search
行动的路线。您可以按如下方式添加搜索路线:
resources :keywords do
collection do
get 'search'
end
end
答案 2 :(得分:0)
如果你想使用搜索功能,你需要以一种引发异常的方式使用find(),即传递你想要找到的id。
def show
begin
@keyword = Keyword.find(params[:id])
respond_to do |format|
format.html # show.html.erb
format.json { render json: @keyword }
end
rescue ActiveRecord::RecordNotFound
flash[:notice] = "Wrong keyword"
redirect_to :action => 'index'
end
end