2014-02-11 5 views
0

Мне нужно получить доступ к экземпляру модели рельсов изнутри поискового блока, как указано ниже.sunspot наверняка это можно сделать с помощью какой-то рубиновой магии?

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 для каждого экземпляра продукта, который отличается для каждого продукта, поэтому мне нужно получить к нему доступ.

Большое спасибо Rick

+0

Пожалуйста, просто поместите код, который имеет значение, я не знаю, почему мы смотрим на три почти идентичные вещи. –

+0

ОК приветствие сделано! –

ответ

0

вы имеете в виду это?

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 
+0

Загрос спасибо, но нет. Мне нужно получить доступ к экземпляру Foo за пределами строки: поля блокируются не изнутри. есть идеи ? –

+0

Это не имеет смысла - в этом контексте выполнения self будет классом 'Foo', а не экземпляром' Foo'. Sunspot устанавливает свой материал во время определения класса. Значения экземпляров не имеют никакого отношения к этому. –

+0

Крис Хелд благодарит, что это моя проблема. можете ли вы предложить решение? –

0

ну внутри внутри вы находитесь в другом контексте оценки (Solr :: DSL или что-то в этом роде). Это значит, что у вас есть такие ключевые слова, как «integer, string». Похоже, вы пытаетесь оценить динамические атрибуты/фильтры .. поэтому см. Мой измененный ответ (ниже)

Вы имеете в виду это?

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: не добавлены поля для поиска блоков динамически каждый сам (хотя вышеупомянутые работы)

+0

zagros спасибо, но я обновил свой вопрос. это возможно ? –