【问题标题】:sunspot surely this can be done with some ruby magic?太阳黑子肯定可以用一些红宝石魔法来完成吗?
【发布时间】:2023-03-27 15:29:01
【问题描述】:

我需要从可搜索块内部访问我的 rails 模型实例,如下所示。

class Product

        include MongoMapper::Document
        include Sunspot::Rails::Searchable

        key :field_names, Array

        searchable do |ss|

            self.field_names.each do |field| 
              ss.double field[:name] do 
                field[:value] 
              end 
            end 
        end

end

有谁知道如何通过 Sunspot 做到这一点?

我在每个产品实例上都有一个 field_names 数组,每个产品都不同,所以我需要访问它。

非常感谢 瑞克

【问题讨论】:

  • 请输入重要的代码,我不知道为什么我们会看到三个几乎相同的东西。

标签: ruby-on-rails-3 sunspot sunspot-rails sunspot-solr


【解决方案1】:

你是说这个吗?

def Foo

  attr_accessible  :id, :title

  def fields
    ['something']
  end

  searchable do 

    integer :id
    string  :title

    string :fields, :multiple => true do 
      self.fields
    end

  end

end

【讨论】:

  • zagros 谢谢,但没有。我需要在字符串 :fields 块之外访问 Foo 的实例,而不是从它内部。有什么想法吗?
  • 这毫无意义 - 在那个执行上下文中,self 将是 Foo 类,而不是 Foo 的实例。 Sunspot 在类定义时设置它的东西。实例值与它无关。
  • Chris Heald 谢谢这是我的问题。你能提供一个解决方案吗?
  • 我找不到任何关于我试图向您展示的内容的参考,但这里是 closest post ...所以要动态添加字段,你最好赌注是上述方法(在第二个答案中)或其修改
  • 我不认为你来对了。在您的表上创建任意可搜索字段将使这些字段可搜索该表上的 所有 记录,而不仅仅是具有该字段的记录。这不能很好地映射到太阳黑子 - 您可能需要滚动一些自定义行为来获得您想要的。
【解决方案2】:

在里面,你在一个不同的评估上下文中(Solr::DSL 或类似的东西)。那是提供具有诸如“整数,字符串”之类的关键字的能力。看起来您正在尝试评估动态属性/过滤器 .. .. 所以请查看我修改后的响应(如下)

你是说这个吗?

def Foo

  attr_accessible  :id, :title

  @fields_to_dynamically_add = ['title']


  searchable do |s|

    s.integer :id
    s.string  :title

    @fields_to_dynamically_add.each do |f|
      s.string f.to_sym
    end

  end

end

PS:我自己并没有为可搜索块动态添加字段(尽管上述方法有效)

【讨论】:

  • zagros 谢谢,但我已经更新了我的问题。这可能吗?
猜你喜欢
  • 2013-12-06
  • 1970-01-01
  • 2012-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多