0

午後の皆さん、

Snippet の文字列である content というフィールドがあります。Snippet は Book の子です。総単語数を定義するために、すべてのスニペットのすべてのコンテンツの総単語数を取得したいと思います。その後、検証に対して制限することができます。

誰でもこれを行う方法を知っているか、インナーウェブの他の場所から必要なコードの例を教えてください。

これへの拡張についてのクイックワン。現在、書籍モデルの :size の下に [0,1,2] として格納されている書籍のサイズごとに、異なる単語数を定義する必要があります。どうすればいいですか?

4

2 に答える 2

0

「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
于 2013-10-20T19:31:02.423 に答える