2

次の状況をモデル化する最良の方法は何でしょうか。

Word
  belongs_to :wordable, :polymorphic => true


Phrase
  has_many :words, :as => :workable
  belongs_to :story

Line
  has_many :words, :as => :wordable    
  belongs_to :story


Story
 has_many :lines      
 has_many :phrases
 has_many :words, :through => :phrases
 has_many :words, :through => :lines

できるようになりたい

 @story.words 

行またはフレーズを介してストーリーにリンクされているすべての単語のリストを取得するには...

それは可能ですか?

4

2 に答える 2

6

これを試して:

class Story

  has_many :lines      
  has_many :phrases

  def words(reload=false)
    @words = nil if reload
    @words ||= Word.where("(wordable_type = ? AND wordable_id IN (?)) OR
                            (wordable_type = ? AND wordable_id IN (?))", 
                           "Phrase", phrase_ids, "Line", line_ids)    
  end
end

story.words # returns line and phrase words
story.words.limit(5) 
于 2012-06-25T17:51:33.180 に答える
0

クラスhas_many :words, :through => XXXから 2 つのリレーションを削除し、代わりにメソッドを定義できます。Storywords

def words 
  ([] << lines.collect {|line| line.words} << phrases.collect {|phrase| phrase.words}).flatten
end
于 2012-06-25T17:19:59.287 に答える