我是ROR的新手,所以这可能是一个非常简单的问题。
我刚为我的网络应用程序安装了ransack gem。我想在我的数据库中搜索项目名称和客户端。我有一个索引页面视图,我用于我的主页,然后是一个搜索页面,它使用我创建的搜索操作。
def index
@projects = Project.all
respond_to do |format|
format.html # index.html.erb
format.json { render :json => @projects }
end
end
def search
@q = Project.search(params[:q])
@project_search = @q.result(:distinct => true)
respond_to do |format|
format.html # search.html.erb
format.json { render :json => @projects }
end
end
以下是我的搜索视图的一部分:
<%= search_form_for @q do |f| %>
<%= f.label :project_name %>
<%= f.text_field :project_name %>
<%= f.label :client %>
<%= f.text_field :client %>
<%= f.submit %>
<% end %>
当我尝试加载搜索页面时,出现此错误:
未定义的方法`搜索&#39;
将提取的源放在我的项目控制器中
@q = Project.search(params[:q])
希望这是一个简单的解决方法,你可以解释我做错了什么,以便我学习。
任何帮助都将受到赞赏。
提前致谢!
编辑: 我已在上面添加了我的索引操作,以向您显示我有索引操作和搜索操作。这是我的routes.rb文件。
FinalApp::Application.routes.draw do
resources :projects
match "search" => "projects#search", :as => :search
root :to => 'projects#index'
end
第二次编辑:
我没有重新启动我的服务器。我现在有另一个错误。
未定义的方法`结果&#39;
将提取的源放在我的项目控制器中
@project_search = @q.result(:distinct => true)
第三次编辑:
另一个错误:/
未定义的方法`schema_cache&#39;
将提取的源放在我的项目控制器中
@q = Project.search(params[:q])
答案 0 :(得分:2)
您确定在将Gem添加到Gemfile并重新启动实例或具有正确的开发环境设置后运行了Bundle Install吗?
Ransack添加了搜索方法,因此它似乎没有正确安装。
答案 1 :(得分:0)
问题在另一个问题中得到解决:Ruby on Rails: Advanced search
我从未使用过宝石ransack
,但我认为您的第一行def search
应该是def index
,而不是您在其他地方定义search method
...或者你在routes.rb中包含search
的路由?
无论如何,你正在寻找的是一个非常简单的搜索,我认为你不需要任何宝石。
您可以在模型中定义搜索方法:
product.rb
def self.search(search)
if search
find(:all, :conditions => ['name LIKE ?', "%#{search}%"])
else
find(:all)
end
end
products_controller.rb:
def index
@projects = Project.search(params[:search])
end
搜索表单可以包含在您的应用程序的任何位置:
<% form_tag projects_path, :method => 'get' do %>
<p>
<%= text_field_tag :search, params[:search] %>
<%= submit_tag "Search", :name => nil %>
</p>
<% end %>
我希望它有所帮助