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]) 
+0

你正在使用什么类型的数据库? – 2012-07-20 09:56:01

+0

sqlite3。当我刚开始制作我的应用程序时,我运行scaffold命令时,我刚刚离开了默认数据库 – Jazz 2012-07-20 09:58:44

Problem solved in another question: Ruby on Rails: Advanced search

我从来没有使用过的宝石ransack这样,但是我觉得你的第一线def searchdef 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 %> 

请看看here,如果你需要一个高级搜索一下here

我希望它能帮助

+0

感谢您的回复!请参阅我上面的编辑。我曾经观看过两次铁路投影视频,而我的主要问题是他们已经过时了。我需要一个高级搜索表单,以便搜索许多不同的字段,以帮助缩小大型数据库的搜索结果范围。我看着使用meta_search,太阳黑子,思维狮身人面像,到目前为止,我还没有能够让他们找到更多的价值。我希望你明白我的意思。有什么建议么? – Jazz 2012-07-20 09:28:58

+0

是的,我明白你的意思,但是当你开始包括许多宝石时,你可能会面临不兼容。出于这个原因,我宁愿总是创建我自己的搜索,即使它是先进的。例如,你可以在很多领域进行搜索,比如'name'和'surname':'find(:all,:conditions => ['name or surname LIKE?','%#{search}%“])'' 。我想你应该尝试创建自己的搜索方法.... – gabrielhilal 2012-07-20 16:31:53

而且你确信你运行包添加宝石您的Gemfile后,安装并重新启动实例或有正确的发展ENV设置?

Ransack添加了搜索方法,因此看起来没有正确安装。

+0

我愚蠢没有重新启动服务器,谢谢!我现在有另一个问题。一行后:/,请看原文中的编辑。 – Jazz 2012-07-20 09:42:26