2014-02-12 2 views
0

그래서 많은 다른 페이지에 포함될 수있는 많은 항목이 있습니다. 다음은 단순화 된 모델입니다.태양 흑점이있는 동적 필드로 인덱싱 및 정렬

class Page 
    #we just need the id for this question 
end 

class Item 
    embeds_many :page_usages 
end 

class PageUsage 
    field :position, :default => 0 
    embedded_in :item 
    belongs_to :page 
end 

따라서 page_usage는 모든 페이지의 항목 위치를 유지합니다. 나는 그것을 solr에 넣어서 올바른 아이템을 끌어 올릴 수 있고 올바른 순서로 나를 원할 것입니다.

나는 동적 인 분야를 조사해 보았지만 이런 식으로 끝났지 만 확실하지는 않습니다. 나는이 있는지 확인합니다 뭔가가 필요

Item.search do 
    dynamic :page_usages do 
    #i have @page.id but not sure how to get all items with the @page.id 
    end 
end 

:이 같은 뭔가를

searchable do 
dynamic_integer :page_usages do 
    page_usages.inject({}) do |hash, page_usage| 
    hash.merge(page_usage.page_id => page_usage.position) 
    end 
end 
end 

그리고 내 컨트롤러 : I 필드는 기본적으로 항목의 위치를 ​​가리키는 페이지 ID가되고 싶어요 항목이 페이지에 존재하고 position_by를 위치와 함께 사용하는 방법을 찾으십시오. 이 방법이 가능합니까 아니면 다른 솔루션을 찾아야합니까?

답변

0

많은 시행 착오 끝에 해결했습니다.

그래서 나는 중요한 것을 중요한 상징으로 먼저 저장해야했습니다. 그러나 내가 만난 문제는 상징이 그것에 인용 부호를 가질 수 없다는 것이 었습니다. 따라서 id에 대해 to_sym을 호출하면 나중에 "잘못된 상수 이름"오류가 발생하는 "123456789"와 같은 모양이됩니다. 그래서 id 앞에 문자열을 던져 다음과 같은 새로운 심볼을 만들었습니다 : page123456789.

다음 단계는 검색 블록을 만드는 것이 었습니다 : 해당 페이지의 ID를 사용하여

Item.search do 
    dynamic :page_usages do 
    with ("page" + page.id.to_s).to_sym).greater_than(-1) 
    order_by(("page" + page.id.to_s).to_sym, :asc) 
    end 
end 

을, 나는 올바른 순서의 모든 권리 항목을 당길 수 있었다. 기본적으로 내 위치는 0에서 시작하여 거기에서부터 올라 가기 때문에 -1 이상을 사용했습니다.