2017-02-28 13 views
0

私は、これらの投稿を作成したユーザーによって、指定した日時以降に投稿を非アクティブにする必要があります。ポストをアクティブまたは非アクティブにするためにブール値フィールド "published"を追加しました。日付と時刻の後に投稿を非アクティブにする

投稿が有効な場合、すべての訪問者に投稿が表示されます。非アクティブの場合、投稿はユーザーダッシュボードに非アクティブとして表示されます。

与えられた日時を過ぎた後にポストを非アクティブにする最良の方法は何ですか?それは自動でなければなりませんが、私は適切な方法がActive Jobを使用しているとは思いません。アクティブな場合は、DB内のすべての記事は、アクティブ、

  • 場合は、そう、必要であれば、それは私がHerokuのを使用してい
  • を非アクティブに与えられた日時と現在の日時

  • を比較

    • チェックそれは私の労働者を常に忙しくしてくれるでしょう。

  • 答えて

    1

    あなたはいくつかのことを行うことができます。

    オプション1:

    @ jawad-khawajaの回答に基づいて、より良いアプローチは、expired_at insteaを使用することですdはpublished_atです。なぜなら、私にとって、公開日は投稿が利用可能な日付であるからです。このようにして、ユーザーは自分の投稿の有効期限を定義することができます(同じ公開日ではありません)。ここで

    あなたにその有効期限に基づいて、アクティブ/非アクティブの投稿が

    # active posts 
    scope :published, -> { where('expired_at > ?', Time.now) } 
    
    # inactive posts 
    scope :unpublished, -> { where('expired_at < ?', Time.now) } 
    

    オプション2得ることができる方法いくつかの例:あなたはブール値として属性publishedを持っていて、本当にマークが必要な場合は

    をそれは自動的に、オプションが使用されますwhenever gem

    このオプションのためのCONS

    • あなたが同じことを表す2つの属性があります:有効期限の最小単位は分である場合にはbooleanとしてpublishedと日時
    • としてexpiration_datetimeを、あなたはすべての-有効期限が切れていない場合は毎分をチェックする必要があります投稿は期限切れの状態になります。おそらくあなたのサーバーに過負荷がかかるでしょう。

    結論:

    私のお勧めの方法は、オプション1

    +0

    オプション1がより適しているようです。投稿を作成している間に有効期限を指定できるようにして、expire_atというフィールドに書きます。ビューに投稿を掲載しているうちに、このスコープを使用できます。しかし、同じ質問ですが、すべてのユーザーは毎週約10の投稿を作成します。 300ユーザーがこのアプリを使用し、毎月12 000の投稿が作成されます。ユーザーが投稿を削除するまで、私は決して削除しません。この方法はパフォーマンスの観点から十分ですか? –

    +1

    あなたが1百万の投稿を持っている場合は、それらを一度にすべて表示する必要はありません。この場合、ページネーション、フィルターなどを使用したいと考えています。データベースに関しては、ほとんどの場合、パフォーマンスが低下することなく大量のデータを保存できます。 – rogelio

    3

    あなたは、単にむしろブール値を設定するよりも、ポストを取得して表示することを計画している場合、あなただけのモデルにスコープを追加することができます。

    scope :published, -> { where('publish_at < ?', Time.now) } 
    

    そしてこのPost.published

    のように使うには、私を知ってみましょうこれが役立つならば。

    アップデート1:

    あなたはポストがアクティブであるかどうかを決定する必要がある場合は、このようなモデルにメソッドを追加、

    def active? 
        self.publish_at < Time.now 
    end 
    
    +0

    良いアイデアを選択することです。アクティブな投稿については、支払いなどの機能を利用できるようになります。アクティブな投稿と非アクティブな投稿を同じテーブルに保存し、ブール値でそれらを異ならせることを考えていました。しかし、パフォーマンスビューが次のようなことを行うには十分です:current_user.posts.published?それは何千もの投稿を照会し、範囲に応じて公開されたものを見つけるでしょうか? –

    +0

    非アクティブな投稿はどうなりますか?それらを特定する方法はありません。 – rogelio

    +0

    私の更新された答えを見てください。 @EnisD。 –

    関連する問題