【问题标题】:Ruby on Rails: Ransack undefined method `result`Ruby on Rails: Ransack 未定义的方法`result`
【发布时间】:2012-07-19 12:42:53
【问题描述】:

我是 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 %>

当我尝试加载搜索页面时,出现以下错误:

未定义的方法`search'

提取的源代码位于我的项目控制器中

@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

第二次编辑:

我没有重新启动我的服务器。我现在有另一个错误。

未定义的方法`result'

提取的源代码位于我的项目控制器中

@project_search = @q.result(:distinct => true)

第三次编辑:

另一个错误:/

未定义的方法`schema_cache'

提取的源代码位于我的项目控制器中

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

【问题讨论】:

  • 你使用的是什么类型的数据库?
  • sqlite3.我刚开始制作应用程序时运行脚手架命令时离开了默认数据库

标签: ruby-on-rails ruby search ransack


【解决方案1】:

问题已在另一个问题中解决:Ruby on Rails: Advanced search

我从未使用过 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 %>

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

希望对你有帮助

【讨论】:

  • 感谢您的回复!请参阅我上面的编辑。我以前看过很多次铁路演员的视频,我的主要问题是它们已经过时了。我需要一个高级搜索表单,以便可以搜索许多不同的字段,以帮助缩小来自大型数据库的搜索结果。我研究了使用 meta_search、sunspot、thinking-sphinx,但到目前为止,我还没有能够让它们中的任何一个来搜索更多的值。我希望你明白我的意思。有什么建议吗?
  • 是的,我明白你的意思,但是当你开始包含许多宝石时,你可能会遇到不兼容的问题。出于这个原因,我更喜欢始终创建自己的搜索,即使它是高级的。例如,您可以搜索多个字段,例如namesurnamefind(:all, :conditions =&gt; ['name OR surname LIKE ?', "%#{search}%"])。我认为您应该尝试创建自己的搜索方法....
【解决方案2】:

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

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

【讨论】:

  • 我愚蠢地没有重新启动服务器,谢谢!我现在有另一个问题。一行后:/,请参阅原始帖子中的编辑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-21
  • 1970-01-01
  • 2016-12-15
  • 2019-10-31
  • 2018-07-06
  • 2012-09-25
相关资源
最近更新 更多