2016-03-20 6 views
0

私はコースシステムをレールに作成していますが、特定のタスクを完了するためのポイントをユーザーに与えたいと思いますが、ユーザーがページを更新してポイントをもう一度入手できるようにしたいのですが。Rails:ユーザーはポイントを1回だけ取得できます。

私のコントローラは、次のようになります。

def beginnerscourse_08c 
    @user = current_user 
    @completion = "100%" 
    @user.increment(:tradepoints, 100) 
    @user.save 
end 

は、ユーザーがすでに論文のポイントを授与された場合は、それらに報いるいないかどうかを確認するブールまたは同様のシステムを作るための最も簡単な方法は何ですか。

+1

アプリケーションにはどのようなモデルがありますか? – Vishal

+0

コードからは、Usersテーブルに 'tradepoints'という列があるようです。 – Cyzanfar

+0

devise gem' current_user'を使用していますか? –

答えて

3

外部キーとしてuser_idcourse_idの列を持つ関連付けテーブルが必要です。この表の目的は、どのユーザーがどのコースに対して賞を受けたかを把握することです。例:あなたは、ユーザー1は、コース1を完了したことを、ユーザー2は、その上のコース1と2を完了し、かついるはっきりと見ることができ、上記の表を見てみると

user_id course_id 
    1   1 
    2   1 
    2   2 
    3   1 
    4   3 

。その表をチェックして、特定のユーザーがポイントを増やす前に特定のコースの賞を受賞しているかどうかを確認したり、完了したコースのリストをユーザーに表示したり、完了したユーザー数に関するレポートを実行したりできます与えられたコース。

+0

ああ、これは意味があります。どうもありがとうございます! – M1xelated

+0

これはコーステーブルを作成することを意味します。ユーザーがコースを開始するとすぐに、コースはユーザーに属し、ユーザーには多くのコースが適切であると言います。 – M1xelated

+0

私はそれを 'course_completions'として作成し、ユーザーがコースを完了したときにレコードを追加しますが、同じレコードがまだ存在しない場合(つまり、前に完了していない場合)にのみ追加します。その他の詳細はアプリケーションの残りの部分によって異なります。 –

関連する問題