Ruby on Rails:Ransack未定义的方法`result`

时间:2012-07-20 08:47:24

标签: ruby-on-rails ruby search ransack

我是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])

2 个答案:

答案 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 %>

请查看here,如果您需要高级搜索,请here

我希望它有所帮助