2012-07-18 78 views
0

我用太陽黑子寶石尋找麻煩。我想在對象租戶中搜索用戶電子郵件。Rails3太陽黑子has_many關聯

租客有很多用戶

在承租人我這樣做:

searchable do 
    text :name, :notifications_email 

    text :users do 
    users.map(&:email) 
    end 
end 

搜索的namenotifications_email工作正常,但是當我搜索用戶的電子郵件沒有找到結果。

我這樣做是在控制檯:

s = Tenant.solr_search do fulltext "info" end 

我得到這個對象:

<Sunspot::Search:{:fq=>["type:Tenant"], :q=>"info", :fl=>"* score", :qf=>"name_text notifications_email_text users_text", :defType=>"dismax", :start=>0, :rows=>30}> 

什麼讓我困惑的是,有users_text沒有它必須users_email_text或類似這樣的東西?

回答

0

爲了使它更清楚,你應該這樣定義你的搜索塊:

searchable do 
    text :name 
    text :notifications_email 
    text :users_email do 
    users.map(&:email) 
    end 
end 

在指數時間,太陽黑子追加屬性的屬性名稱末尾的類型。在:users_email的情況下,它變成qf=>users_email_text。看起來你的困惑在於命名約定。只要我定義了do塊中包含的內容,我就可以將電子郵件屬性定義爲我想要的任何內容。它的定義是這樣的:

searchable do 
    text :name 
    text :notifications_email 
    text :emails do 
    users.map(&:email) 
    end 
end 

本來給我相同的功能,只是太陽黑子會變成變量名到qf=>emails_text德寧指數時間。