0

使用“Advance Rails Recipes”中的“Find Stuff(quick and dirty)”教程,我可以在开发环境中找到东西,但不能在生产环境中找到东西。找到东西(但没有在生产中)

NoMethodError: undefined method `searchable_by' 

我有 “的lib/searchable.rb”

module Searchable 

    def searchable_by(*_column_names) 
    @search_columns = [] 
    [column_names].flatten.each do |name| 
     @search_columns << name 
    end 
    end 

    def search(query, fields=nil, options={}) 
    with_scope :find => { 
     :conditions => search_conditions(query, fields) } do 
     find :all, options 
     end 
    end 

    def search_conditions(query, fields=nil) 
    return nil if query.blank? 
    fields ||= @search_columns 

    words = query.split(",").map(&:split).flatten 

    binds = {} 
    or_frags = [] 
    count = 1 

    words.each do |word| 
     like_frags = [fields].flatten.map { |f| "LOWER(#{f}) LIKE :word#{count}" } 
     or_frags << "(#{like_frags.join(" OR ")})" 
     binds["word#{count}".to_sym] = "%#{word.to_s.downcase}%" 
     count += 1 
    end 

    [or_frags.join(" AND "), binds] 
    end 
end 

此代码,这在我的 '配置/初始化/ core_extensions.rb'

ActiveRecord::Base.extend Searchable 

我已经漫游了互联网,并发现人们说,如果我改变config.cache_classes为false,那么它应该工作:但它没有。

我从来没有尝试过在我的应用程序中使用额外的脚本,所以我可能错过了一些非常基本的东西。

任何帮助将不胜感激!

UPDATE:附加信息

我在模型中指定此(应用程序/模型/ candidate.rb)

class Candidate < ActiveRecord::Base 
    searchable_by :first_name, :surname, :experience, :skills, :looking_for, :hours_required, :location, :more_details 
end 

,我把它叫做控制器(应用程序/控制器/ candidates_controller。 RB)

class CandidatesController < ApplicationController 
    def index 
    @candidates = Candidate.visible 
    end 

    def search 
    @candidates = Candidate.visible.search(params[:q]) 
    end 

end 

(可见的只是一个named_scope)

任何帮助将非常感激。

+0

如何调用searchable_by? – shingara 2010-08-16 10:05:38

+0

@candidates = Candidate.search(params [:q]) – 2010-08-16 11:08:12

回答

1

您在searchable_by上有一个拼写错误* _column_names应该是* column_names,一旦修复,请确保重新启动您的Rails服务器。

+0

感谢您的鹰眼! – 2010-08-19 21:41:08