0

我是 ROR 的新手,所以这可能是一个非常简单的问题。

我刚刚为我的 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)

第三次编辑:

另一个错误:/

未定义的方法“schema_cache”

提取的源代码在我的项目控制器中的这一行

@q = Project.search(params[:q])
4

2 回答 2

2

并且您确定在将 Gem 添加到 Gemfile 并重新启动实例后运行 Bundle Install 或具有正确的开发环境设置?

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

于 2012-07-20T09:31:42.097 回答
0

在另一个问题中解决了问题:Ruby on Rails:高级搜索

我从未使用过 gem ransack,但我认为您的第一行def search应该是def index并且您在search method其他地方定义...或者您是否search在您的 routes.rb 中包含了一条路线?

无论如何,您正在寻找的是一个非常简单的搜索,我认为您不需要任何宝石。

您可以在模型中定义搜索方法:

产品.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 %>

请看这里,如果您需要高级搜索,请看这里

我希望它有帮助

于 2012-07-20T09:20:14.780 回答