Ruby on Rails:Ransack undefined method'result`
我是ROR的新手,所以这可能是一个非常简单的问题。Ruby on Rails:Ransack undefined method'result`
我刚刚为我的web应用程序安装了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 %>
当我尝试加载搜索页面,我得到这个错误:
未定义的方法'搜索”
随着提取的源文件在我的项目控制器中,位于此行
@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
第二个编辑:
我没有重新启动我的服务器。我现在有另一个错误。
未定义的方法`结果”
与所提取的源在我的项目控制器在此线是
@project_search = @q.result(:distinct => true)
THIRD编辑:
另一个错误:/
未定义的方法` schema_cache'
随着提取源在我的项目控制器在该行
@q = Project.search(params[:q])
Problem solved in another question: 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 %>
我希望它能帮助
感谢您的回复!请参阅我上面的编辑。我曾经观看过两次铁路投影视频,而我的主要问题是他们已经过时了。我需要一个高级搜索表单,以便搜索许多不同的字段,以帮助缩小大型数据库的搜索结果范围。我看着使用meta_search,太阳黑子,思维狮身人面像,到目前为止,我还没有能够让他们找到更多的价值。我希望你明白我的意思。有什么建议么? – Jazz 2012-07-20 09:28:58
是的,我明白你的意思,但是当你开始包括许多宝石时,你可能会面临不兼容。出于这个原因,我宁愿总是创建我自己的搜索,即使它是先进的。例如,你可以在很多领域进行搜索,比如'name'和'surname':'find(:all,:conditions => ['name or surname LIKE?','%#{search}%“])'' 。我想你应该尝试创建自己的搜索方法.... – gabrielhilal 2012-07-20 16:31:53
而且你确信你运行包添加宝石您的Gemfile后,安装并重新启动实例或有正确的发展ENV设置?
Ransack添加了搜索方法,因此看起来没有正确安装。
我愚蠢没有重新启动服务器,谢谢!我现在有另一个问题。一行后:/,请看原文中的编辑。 – Jazz 2012-07-20 09:42:26
你正在使用什么类型的数据库? – 2012-07-20 09:56:01
sqlite3。当我刚开始制作我的应用程序时,我运行scaffold命令时,我刚刚离开了默认数据库 – Jazz 2012-07-20 09:58:44