1

ユーザーがシステムをスパムボットとして使用していないことを確認する次のコードがあります。モデル ShopInvite には、次のコードがあります。

  before_validation(on: :create) do
    !(ShopInvite.where("created_at >= ?", Time.now.ago(60.minutes)).where(:sender_ip => self.sender_ip).count > 2)
  end

これは機能しますが、「スパム保護のため送信しない」というメッセージをビューに表示するにはどうすればよいですか?

4

2 に答える 2

1

インスタンスにエラーを追加するだけです:

before_validation(on: :create) do
  if (ShopInvite.where("created_at >= ?", Time.now.ago(60.minutes)).where(:sender_ip =>  self.sender_ip).count > 2)
    errors[:base] << 'cannot be sent due to spam protection'
    false
  else
    true
  end
end

次に、d_ethier が言ったようvalid?に、インスタンスでメソッドを呼び出し、false が返された場合はビューにエラー メッセージを表示します。

これは実際には一種の検証なので、おそらくvalidatesの代わりに を使用する必要がありbefore_validationます。

于 2013-08-26T01:34:07.907 に答える