首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用globalize2的搜索逻辑?

使用globalize2的搜索逻辑?
EN

Stack Overflow用户
提问于 2009-11-01 20:11:33
回答 1查看 264关注 0票数 2

鉴于有一种模式:

代码语言:javascript
复制
class MenuItem < ActiveRecord::Base
  translates :title
end

如果插入了搜索逻辑,我希望以下内容能够正常工作:

代码语言:javascript
复制
>> MenuItem.search(:title_like => 'tea')

可悲的是,事实并非如此:

代码语言:javascript
复制
Searchlogic::Search::UnknownConditionError: The title_like is not a valid condition. You may only use conditions that map to a named scope

有什么办法能让你成功吗?

我能做的最接近的是:

代码语言:javascript
复制
>> MenuItem.search(:globalize_translations_title_like => 'tea')

看起来不太好。

EN

回答 1

Stack Overflow用户

发布于 2011-03-01 09:57:31

我开发了搜索逻辑。默认情况下,它利用现有的命名作用域和数据库列。它实际上不能超越这一点,因为最终它必须使用有效的列名来创建结果SQL。尽管如此,搜索逻辑确实无法清楚地理解您的:title属性意味着什么。即使是这样,它也会特定于在翻译库中定义的逻辑。这是一个危险的标志,这不应该在库本身,而是一个插件或代码,在您的应用程序内初始化。

为什么不重写method_missing方法并自己进行映射呢?Searchlogic通过执行alias_scope提供了别名作用域的简单方法:

代码语言:javascript
复制
alias_scope :title_like, lambda { |value| globalize_translations_title_like(value) }

下面是一个快速的刺(这是未经测试的):

代码语言:javascript
复制
module TranslationsMapping
  def self.included(klass)
    klass.class_eval do
      extend ClassMethods
    end
  end

  module ClassMethods
    protected
      def method_missing(name, *args, &block)
        translation_attributes = ["title"].join("|")
        conditions = (Searchlogic::NamedScopes::Conditions::PRIMARY_CONDITIONS + 
          Searchlogic::NamedScopes::Conditions::ALIAS_CONDITIONS).join("|"))

        if name.to_s =~ /^(#{translation_attributes})_(#{conditions})$/
          attribute_name = $1
          condition_name = $2
          alias_scope "#{attribute_name}_#{condition_name}", lambda { |value| send("globalize_translations_#{attribute_name}_#{condition_name}", value) }
          send(name, *args, &block)
        else
          super
        end
      end
   end
end

ActiveRecord::Base.send(:include, TranslationsMapping)

希望这能有所帮助。再说一遍,我还没有测试代码,但是你应该有个大致的想法。但我同意,翻译的实现应该在幕后,你真的不应该在应用程序中的任何地方输入"globalize_translations“,这应该在模型级别上得到透明的处理。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1658194

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档