質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.23%

rails 自動でフラグを立てる

解決済

回答 2

投稿 ・編集

  • 評価
  • クリップ 1
  • VIEW 2,432

smith

score 169

出品アイテムの出品期限が切れているかどうかのflagを出品アイテムテーブルに持つ場合
出品期限が切れたタイミングを自動察知してでフラグを立てるにはどうしたら良いでしょうか?
今まではユーザー操作によってフラグを立てる実装しかしたことありません
バルクインサート・アップデートで実装するのかな?
と思ったのですが、処理が常に走ると重くなりますよね。。


現在の実装
・アイテム詳細画面を表示する際に、limit_day?メソッッドで出品期限をチェック
・出品期限が切れている場合はviewの「入札」部分を非表示とする
・URL直打の場合を想定しvalidationとリダイレクトを実装
・出品期限(残り時間)はjavascriptでカウントダウン形式で表示

  def limit_day?(item)
    today = Time.now
    @limit_day = item.limit_day
    if (@limit_day - today ) > 0
      true
    else
      false
    end
  end
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+2

やりたいことを推測して答えますと、こんな実装のほうがいいのではないでしょうか?

  • 出品アイテムのテーブルには、作成時に期限カラムを設定しておく
  • viewではjavascript等で、現在時刻と期限カラムの値との差を表示する
  • backendでは更新や削除の際にvalidationしっかりかけておく

フラグの更新という処理は多分必要ないはずです
現在時刻と出品アイテムの期限の比較で常に期限切れかどうかはわかるので...

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/02/02 02:30

    回答頂きありがとう御座います。
    現在の実装を追加いたしました。悪意のあるユーザがいた場合現在の実装で問題ないでしょうか?

    キャンセル

  • 2015/02/02 02:35

    limit_day?の実装に問題はなさそうですが、
    「悪意のあるユーザ」という点に関しては、validationの実装になるためその部分を見ないとなんとも言えないですね

    コメント欄で連続した質問は、多分あまり好ましいものではないと思いますので、
    まだ何か質問があるようであれば別個に作成するのが良いと思います!

    キャンセル

+1

出品アイテムテーブルのフラグを更新する sql を書いて、それを 夜の 0 時過ぎに実行するようにすればよいのでは?

ある処理を定期的に自動実行するには、cron の仕組みをつかうとか、clockwork のような gem を利用するとか...

参考:
- linuxレンタルサーバで定時処理でDBを更新したい https://teratail.com/questions/2591
- RSSリーダーの記事更新のバックグラウンドジョブ概要 http://xoyip.hatenablog.com/entry/2014/02/15/202607

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/01/31 13:07

    ありがとう御座います。cronとclockwork の件調べてみます。
    出品期限が切れたタイミングを自動察知してでフラグを立てるのはできないですよね
    ヤフオクはどういう仕組みで出品期限が切れを管理実装しているのでしょうか・・

    キャンセル

  • 2015/01/31 18:36

    >> ... 出品期限が切れたタイミングを自動察知 ...
    夜中の0時に出品期限をすべてチェックするタスクを自動で走らせることが、まさに それなのでは?

    キャンセル

  • 2015/01/31 22:26

    すいません、残り時間のことでした。
    残り時間が0になると入札できなくなるやつのことです。
    あれってview側でロジック作って振り分けているんですか

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.23%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る