わかりました、私は本当にこれに行き詰まっています。いくつかのアイデアを投げかけるのはいいかもしれません.これは長い投稿かもしれません.
まず、私がやろうとしていることを説明してみましょう。現在、Snippets と呼ばれるネストされたモデルを持つ Book と呼ばれるモデルがあります。[0 => 'Short', 1 => 'Medium', 2 => 'Long'] であるかどうかを定義する Book モデルに size という列があります。また、Book コントローラーで総単語数を取得しました。これにより、すべてのスニペットの単語数がわかります。今私が試してみたいことは、サイズ [0,1,2] に応じて、単語数に異なる制限を定義することです。以下に示す例
サイズ (コンテンツの長さの検証) | 文字数
短い (500) 作品ごと | 合計20,000語
作成ごとに中 (700) | 合計50,000語
作成ごとに長い (1000) | 合計100,000語
current_word_count - サイズに応じた total_word_count [短、中、長]
したがって、現在作業している Book で定義されているサイズに応じて、その本のスニペットの単語の合計量を、現在のすべての投稿を含むモデルによって定義したいと思います。たとえば、短い本があり、すでに 10,000 単語がある場合スニペットには 10,000 が残っているはずです。私がこのように考えた理由は、すべてのユーザーが常に必要な最大数を投稿するとは限らないためです。
今コードのために。
まずモデル:
Book.rb
class Book < ActiveRecord::Base
has_many :snippets
attr_accessible :title, :book_id, :size
def get_word_count
@word_count = 0
self.snippets.each.do |c|
@word_count += c.content.scan(/\w+/).size
end
def short?
size == 0
end
def medium?
size == 1
end
def long?
size == 2
end
end
Snippet.rb
class Snippet < ActiveRecord::Base
before_create :check_limit
belongs_to :book
attr_accessible :content, :book_id
validates :book_id, presence: true
#validates_length_of :content, less_than: 200, if: book.small?
#validates_length_of :content, less_than: 500, if: book.medium?
#validates_length_of :content, less_than: 1000, if: book.long?
def check_limit
if book.word_limit_reached?
errors.add :base, 'Snippet limit reached.'
return false
end
return true
end
end
これはデータベース アクションであるため、これらのルールを定義するまでは、まだコントローラーに触れる必要はありません。私はここに座ってさまざまなことを試してきましたが、Rails にはまだ慣れていないので、コードと実行できることを理解するためにこれを試してみました。
いつものように、あなたの助けとフィードバックに感謝します。