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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

0回答

488閲覧

Railsでデータの抽出を期間で制限したい

auto8726

総合スコア4

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

3クリップ

投稿2020/01/19 05:31

編集2020/01/22 15:16

前提・実現したいこと

Tinderのようなスワイプ機能のあるアプリをRalisにて制作しております。
ユーザーのスワイプの可能回数を1日毎に特定回数に制限したいのですが、
何か方法はありますか?

方法なにかあればご教示ください。。

Posts/index

Ruby

1<script> 2 // スワイプするユーザー数の定数を定義 3 var usersNum = <%= @users.length %> 4 var currentUserIndex = 0; 5 var postReaction = function (user_id, reaction) { 6 $.ajaxSetup({ 7 headers: { 8 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content'), 9 } 10 }); 11 $.ajax({ 12 type: "POST", 13 url: "<%= reactions_path %>", 14 data: { 15 user_id: user_id, 16 reaction: reaction, 17 }, 18 success: function(j_data){ 19 console.log("success") 20 } 21 }); 22 } 23 $("#tinderslide").jTinder({ 24 onDislike: function (item) { 25 currentUserIndex++; 26 checkUserNum(); 27 var user_id = item[0].dataset.user_id 28 postReaction(user_id, 'dislike') 29 }, 30 onLike: function (item) { 31 currentUserIndex++; 32 checkUserNum(); 33 var user_id = item[0].dataset.user_id 34 postReaction(user_id, 'like') 35 }, 36 animationRevertSpeed: 200, 37 animationSpeed: 400, 38 threshold: 1, 39 likeSelector: '.like', 40 dislikeSelector: '.dislike' 41 }); 42 $('.actions .like, .actions .dislike').click(function(e){ 43 e.preventDefault(); 44 $("#tinderslide").jTinder($(this).attr('class')); 45 }); 46 47 function checkUserNum() { 48 // スワイプするユーザー数とスワイプした回数が同じになればaddClassする 49 if (currentUserIndex === usersNum){ 50 $(".noUser").addClass("is-active"); 51 $("#actionBtnArea").addClass("is-none") 52 return; 53 } 54 } 55</script>

photos.controller.erb

Ruby

1class UsersController < ApplicationController 2 # indexアクションを追加する 3 def index 4 @users = User.where.not(id: current_user.id) 5 end 6 7 def show 8 # @userというインスタンス変数を用意する 9 @user = User.find_by(id: params[:id]) 10 end 11end

試したこと

現在、limitで特定回数に制限することはできるものの
「1日ごとに」というところの実装(=limitのカウントを特定期間でリセットする)
ができません。

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

no1knows

2020/01/19 06:16

具体的なソースコードを提示したほうが回答がつきやすいかと思います。
siruku6

2020/01/19 09:55

スワイプする度にeventとしてテーブルに1レコード作成しているのであれば、そのレコードのcreated_atを元にwhereで当日分のデータを絞り込み、件数が規定値に達しているかどうかで条件分岐できると思います。 スワイプイベントの回数をどのように管理しているかは最低限ソースコードで示すことで、他の案も出てくると思います。
siruku6

2020/01/25 09:40

スワイプした回数を保持している変数は currentUserIndex でしょうか? それがわからなければどう修正すればよいか回答しようがないのではないかと思っています。 回答者が1から処理を作成するのであれば話は別ですが...
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問