使用“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
这在我的'config / initializers / core_extensions.rb'
中ActiveRecord::Base.extend Searchable
我已经漫游互联网并发现人们说如果我将config.cache_classes更改为false,那么它应该可以工作:但它没有。
我从来没有尝试在我的应用程序中使用额外的脚本,所以我可能错过了一些非常基本的东西。
任何帮助将不胜感激!
更新:其他信息
我在模型中指定了这个(app / models / candidate.rb)
class Candidate < ActiveRecord::Base
searchable_by :first_name, :surname, :experience, :skills, :looking_for, :hours_required, :location, :more_details
end
我在控制器中调用它(app / controllers / 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 :(得分:1)
你有一个关于searchable_by的错误* _column_names应该是* column_names,一旦修复,一定要重新启动你的rails服务器。