2015-01-15 161 views
0

找我有以下嵌入式結構Mongoid通過嵌入文檔

class CbAuthor 
    include Mongoid::Document 
    embeds_many: cb_bylines 

    field :name, type: String 
end 

class CbByline 
    include Mongoid::Document 

    embedded_in :cb_author 
    has_many :cb_articles 

    field :byline, type: String 
end 

class CbArticle 
    include Mongoid::Document 

    belongs_to :cb_byline 
end 

這是因爲有很多署名或假名的作者在出版和被附會自己的分析報告。所以當我有一個字體時,我如何找到作者?這將是必要的,因爲他們將有儀表板,應該列出他們在各自的副標題下編寫的所有文章。

我試過CbAuthor.cb_bylines但這給了我一個沒有方法的錯誤。或CbAuthor.where(cb_bylines["byline"]: bylineInQuestion),但也會給出錯誤。

本質上的目標是有一個作者的名字來找到那些署名

回答

1

embeds_many :cb_bylines是說「添加哈希叫cb_bylines的數組」的這樣一種有趣的方式相關聯的所有他的署名和文章(至少就存儲而言)。這意味着,你CbAuthor看看像這裏面的MongoDB:

{ 
    _id: '...', 
    name: '...', 
    cb_bylines: [ 
    { _id: '...', byline: '...' }, 
    ... 
    ] 
} 

的MongoDB將展開爲您簡單的查詢數組,所以你可以簡單地尋找'cb_bylines.byline'好像你查詢集合內的哈希:

authors_by_lined_as_pancakes = CbAuthor.where('cb_bylines.byline' => 'Pancakes McGee') 

,或者如果你知道只有一個:

pancakes_mcgee = CbAuthor.find_by('cb_bylines.byline' => 'Pancakes McGee') 

不要害怕繞過Rails和Mongoid看你r數據看起來好像在MongoDB裏面。