「each - do」を使用して、ブック内のすべてのスニペットを反復処理できます。
class Book < ActiveRecord::Base
has_many :snippets
...
def get_word_count
@word_count = 0
self.snippets.each.do |c|
@word_count += c.content.scan(/\w+/).size
end
end
end
class Snippets < ActiveRecord::Base
belongs_to :book
...
end
拡張質問のUPD
word_counts の配列を介してさまざまな word_count 関数を設定し、それらにインデックスを付けることができます:size
def get_word_count
#special word_counts for different sizes
wc_func = [];
wc_func[0] = { |cont| cont.length } # for size 0
wc_func[1] = { |cont| cont.scan(/\w+/).size } # for size 1
#word count
@word_count = 0
self.snippets.each.do |c|
@word_count += wc_func[@size][c.content]
end
end
またはケースを実行する:
def get_word_count
case @size
when 0
wc_func = { |cont| cont.length } # for size 0
when 1
wc_func = { |cont| cont.scan(/\w+/).size } # for size 1
else
wc_func = { |cont| cont.length/2 + 5 } # for other sizes
end
#word count
@word_count = 0
self.snippets.each.do |c|
@word_count += wc_func[c.content]
end
end