0

クラスがURLでフェッチされたときに実行し、次のことを実行するようにコントローラーでどのように定義しますか。

current_userへのすべての「ジョブ」を見つける必要があります。私はこのようなものを推測しています。

@joblisting = current_user.Joblisting.find(params[:id])

次に、それらのジョブを取得して、それらの列「job_status」に「completed」というテキストが含まれているかどうかを確認する必要があります。

jobs_statusが「completed」の場合、コードを実行する必要があるため、「if」を実行します

私は計算に合格しなければならないでしょう。

@joblisting = current_user.Joblisting.find(params[:id])
if @joblisting.where(:project_status => "completed")
  number_to_currency(current_user.Joblisting.where(:project_status => 'completed').sum('jobprice') * 1.60 - current_user.Joblisting.where(:project_status => 'completed').sum('jobprice')) 
  Notifier.notify_payout(current_user).deliver
  @joblisting.project_status = 'paid'
  @joblisting.save
end

これは私が持っているものであり、計算をNotifier.notify_payoutテンプレートに渡すことに固執しています。

私よりもレールをよく知っている人なら誰でも、すぐに私の間違いを目にするでしょう。

4

1 に答える 1

0

私の答えはあなたが探しているコードをあなたに与えません。まだ学ぶことがたくさんあると思うので、これを行っていますが、コードを提供するのではなく、何をすべきかを説明します。このコード行が機能すると言うなら...

 @joblisting = Joblisting.where(:developer_id => current_developer[:id])
 if @joblisting.where(:project_status => "completed")
   Notifier.notify_payout(current_developer).deliver
 end

それならそうです。列を「完了」から「有料」に更新する場合、:project_statusこれを処理する方法は複数あります。モデル内にメソッドを作成して(これを呼びましょうproject_is_paid)、プロジェクトのステータスを有料に変更notify_payoutし、成功したときにメソッド内で宣言することができます。

しかし、それは他の誰かがあなたのコードを見て、なぜ突然レコードがデータベース内で「完了」から「有料」に変わるのか疑問に思う人にとっては混乱するかもしれません。さらに、ジョブリストオブジェクトを引数として渡す必要がありますが、これはさらに手間がかかります。

別の考え方としては、コントローラー内に単純な条件ステートメントを記述するだけです。メールが配信されたら、メソッドを呼び出しますproject_is_paid。このすべてのロジックをコントローラーに追加し始めないように注意してください。コントローラーは簡潔で短くする必要があります。モデルにロジックを処理させます。

最後に、投稿した動作中のコントローラーコードに戻ります。次の2行を1行にできることは間違いありません。

 @joblisting = Joblisting.where(:developer_id => current_developer[:id])
 if @joblisting.where(:project_status => "completed")

なぜ私はそれを言うのですか?同じテーブルに対して2つのクエリを実行していますJob Listings。方法がわからない場合は、ここに少し役立ちます...リンク

そして、コメントであなたの最新の質問に答えることができなかったならば、すみません。あなたの質問に更新を投稿してください、そして私は私自身の答えを更新させていただきます。

于 2013-01-24T19:19:04.003 に答える