0

午後の皆さん、

snippet.rb というモデルがあり、承認されるまで一度に 1 人のユーザーのみが投稿できるようにしたいと考えています。

これをカスタム検証として実行しますかafter_create、それとも snippet.rb のとして実行しますか?

ステッププロセスは次のとおりです。

  • ユーザーがスニペットを作成
  • 承認のために送信されたスニペット
  • 前のスニペットが承認されるまで、他のスニペットを作成することはできません。

誰かが私を助けたり、これを行う方法に関するドキュメントの方向性を教えてくれませんか.

いつも助けてくれてありがとう。私は頭の中でこれを解決しようとしていますが、助けるものは何も見つかりません。

4

4 に答える 4

2

あなたのsnippets_controller.rbで

before_filter :check_last_snippet, :only => [:create]

private
def check_last_snippet
  redirect_to root_path unless Snippet.last.approved?
end
于 2013-10-24T10:41:08.687 に答える
0

ユーザーモデルでメソッドを作成し、スニペットを作成する前にこのメソッドを呼び出します

def check_snippet
  return true if user.snippets.blank? || (user.snippets.present? && user.snippets.where(approved: true).size > 1)
end

このメソッドが true を返す場合、ユーザーのみがスニペットを再度投稿できます。それはあなたを助けるかもしれません。

于 2013-10-24T10:31:44.367 に答える
0

カスタム検証を使用する必要があると思います。

例えば

validate :verify_for_not_approved_snippets

def verify_for_not_aproved_posts
  errors.add(:base, "error message") if "your condition here"
end

詳細については、http://guides.rubyonrails.org/v3.2.13/active_record_validations_callbacks.html#performing-custom-validations を参照してください。

于 2013-10-24T10:23:59.557 に答える
0

作成時に検証を使用できます。

 validate :check_last_snippet_approved, :on => :create      

 def check_last_snippet_approved
   errors.add(:base, "could not add due to last snippet not approved") if !self.last.nil? && self.last.approved ==  false
 end
于 2013-10-24T10:32:33.173 に答える