2016-05-17 5 views
0

Rails 3アプリケーションのコントローラーでは、フィールドが変更されたかどうかをテストしてから、リダイレクトページでメッセージを点滅させようとしています。フィールドチェンジのコントローラーテストにおけるRails 3

これは私がしようとしているコードです:

class CostprojectsController < ApplicationController 
    def update 
    @costproject = Costproject.find(params[:id]) 
    @costquestion = @costproject.costquestion 
    nextpath = edit_costquestion_path(@costquestion) if params[:tab1] 
    nextpath = costprojects_editcostestimates_path(:id => @costproject.id) if params[:tab2] 
    nextpath = costprojects_editattachments_path(:id => @costproject.id) if params[:tab3] 
    if nextpath == nil 
     if User.current.admin? 
     nextpath = costprojects_path 
     else 
     nextpath = clients_costcurrent_path 
     end 
    end 
    flash[:success] = "Project Submitted" if @costproject.submit_date_changed? 

    respond_to do |format| 
     if @costproject.update_attributes(params[:costproject]) 
     format.html { redirect_to nextpath } 
     format.json { render json: @costproject } 
     else 
     format.html { render action: "edit" } 
     format.json { render json: @costproject.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

この行は動作していない:

flash[:success] = "Project Submitted" if @costproject.submit_date_changed? 

costproject.submit_date @は有効なフィールドである - そしてそれは、テスト中に更新なってき。

答えて

1

@costprojectをif条件の後に更新しています。これは前もって行うべきだと思います。

次のコードのように、update_attributesがtrueを返した場合にのみ、それをやって検討する必要があります。助けを

respond_to do |format| 
    if @costproject.update_attributes(params[:costproject]) 
    flash[:success] = "Project Submitted" if @costproject.previous_changes.include?(:submit_date) 
    format.html { redirect_to nextpath } 
    format.json { render json: @costproject } 
    else 
    format.html { render action: "edit" } 
    format.json { render json: @costproject.errors, status: :unprocessable_entity } 
    end 
end 
+0

感謝を。コードを移動しようとしました。しかし、何らかの理由で「もし」が真実を返さない。 "if"部分を削除すると、フラッシュが表示されます。 – Reddirt

+0

@ costproject.previous_changesにupdate_attributesの後に何かが含まれていないかどうかを確認します。なぜなら、update_attributesは変更された情報を消去する可能性が高いからです。メソッド –

+0

私は 'flash [:success] = @ costproject.changes'を追加して何も得ませんでした – Reddirt

関連する問題