2017-04-11 10 views
0

私はこの問題に気付きましたが、いくつかの推奨される解決策を試した結果、何が間違っているのか分かりませんでした。サンプルモデルとユーザーモデルもあります。サンプルが承認されると、サンプルの時間はユーザーの合計時間に加算されますが、ユーザーの値は決して更新されません。各ユーザーには、承認のために送信されたサンプルに保存されている固有の電子メールがあります。データベースにチェックインして、値にアクセスする際に問題ではないことを確認しました。エラーはスローされていないので、何が起きているのか分かりません。私はルビーとレールにはかなり新しいので、どんな助けにも感謝しています。私samples_controller.rbは、機能が含まれていますRails .update_attributeが更新されない

def approve 
    @sample = Sample.find(params[:id]) 
    @sample.update(sample_status:1) 
    @user = User.find(Sample.email) 
    hours_update = @user.hours + @sample.volunteer_hours 
    @user.update_attributes(:hours, hours_update) 
    redirect_to samples_adminsamples_path 
    end 

編集:ヘルプ皆のためのおかげで、私は適切なユーザーを取得するためにコマンドを

@user = User.find_by(email: @sample.email) 

を使用する必要が判明します。

+0

時間更新で得られる価値と時間フィールドのデータタイプは何ですか? – Vishal

答えて

0

サンプルテーブルとユーザーテーブルのdb構造のようなデータを追加できますか?

限定された情報から、私は行番号4(@user = User.find(Sample.email))が問題だと思います。 idSample.email上のDBを照会する

.find()試みは、DB内の対応するユーザのidユーザーの電子メールを与えないことになります。

私もそれがリソースを見つけるために失敗した場合.find()ActiveRecord::RecordNotFound例外がスローされますので、あなたのコントローラでは、あなたには、いくつかの場所begin-rescueブロックを使用してスローされた例外を抑制していることを推測しています。

また、ユーザーを正しくフェッチしている場合は、update_columnを試して値を更新することもできます。

+0

これは問題でした。適切なユーザーを得るために '@user = User.find_by(email:@ sample.email)'を使用する必要がありました。 – newtothis

0

あなたはそれが

@user.update_attributes(hours: hours_update) 

または

でなければなりません update_attributes

ために間違ったフォーマットを使用している

@user.update_attribute(:hours, hours_update) 

注:update_attributeは、コールバックをトリガしません

+0

お勧めの両方のフォーマットを試しましたが、同じ問題があっても、エラーメッセージやその他の手がかりはありません。 – newtothis

+0

https://apidock.com/rails/ActiveRecord/Persistence/update_attributeによると、update_attributeを使用すると、「検証はスキップされ、コールバックが呼び出されます」。 –

関連する問題