2017-10-28 13 views
0

コントローラに検証時間を設定する方法はありますか?たとえば、ユーザーが投稿を作成する場合は、5秒待ってから別のメッセージを作成する必要があります。Rails:新しいレコード作成の検証速度

コントローラでこれを実行したいのは、明らかにcurrent_userのみの検証であるためです。

ありがとうございました。

before_action :check_minimum_time_to_create_post, only: [:create] 

def create 
    ... 
end 

private 

def check_minimum_time_to_create_post 
    last_post = current_user.posts.last 
    if last_post && last_post.created_at - Time.now <= 5.seconds 
    redirect_to error_page 
    end 
end 

しかし、私のようなモデルでそれを行うことをお勧めします:

+1

短い答えは「はい」です。 – jvillian

+0

別の短い答えです。タイムアウトがDBレベルまたはRailsアプリケーションレベルに設定されていて、DBの実行にタイムアウトよりも時間がかかる場合は、エラーが発生します。私はDBレベルで真実の1つのソースを持ってこれを行うことが理にかなっていると思います。 –

+0

モデルにバリデーションを追加することをお勧めします。 –

答えて

2

簡単な方法は、before_actionでそれを行うには可能性があり、これはあなたのアイデアを与える

class Post < ApplicationRecord 
    validate :check_minimum_time_to_create_post, on: :create 

    def check_minimum_time_to_create_post 
    last_post = self.user.posts.last 
    if last_post && last_post.created_at - Time.now <= 5.seconds 
     errors[:base] << "The minimum time to create another post is xyz..." 
    end 
    end 
end 

希望。どのようにそれを行うことができます。

+0

ありがとう!残念ながら、モデルの検証では、私はこのエラーを受け取ります: 未定義メソッド ' - 'はnil:NilClass – rod

+0

はNILです。last_post.created_atはメモリにありますが、created_atフィールドはまだありません... NILです。 – rod

関連する問題