2016-12-18 8 views
0

proposalrequestに属し、requestが多く、proposalsのネストされたルートを持つアプリ構造を持っています。私はsend_proposalメソッドを実行すると未定義メソッド `request 'for true:TrueClass

、私はそれがproposalが属していることをこれにrequeststatusを更新するために取得しようとしていますが、私はundefined method 'request' for true:TrueClass言うエラーを取得しています。

この方法のための私のルートは(私はそれが重要だと思うないこと)である:私のproposals_controllerに見られるようなここ

put "proposal/:id/send_proposal" => "proposals#send_proposal", as: "send_proposal" 

は、私のsend_proposal方法であって、

def send_proposal 
    @proposal = Proposal.find(params[:id]) 
    ProposalMailer.send_proposal_to_client(@proposal, @proposal.request.user).deliver_now 
    @proposal = @proposal.update_attributes(status: "Sent to Client") 
    @proposal.request = @proposal.request.update_attributes(archived: "Proposal Sent to Client") <<<<<<<<<ERROR CALLED ON THIS LINE 
    flash[:notice] = "Your proposal has been sent to the client!" 
    end 

私は多くのを見てきました他のTrueClassの投稿には投稿されていますが、このような問題があるとは思われません。私が間違っていることを誰かが見たり、私が何かを概念化するのを助けることができますTrueClassエラーは一般的には何ですか?

答えて

2

update_attributesupdateの別名である:

更新(属性)
は、トランザクションに包まれた全てのハッシュに、渡されたとの記録が保存されますから、モデルの属性を更新します。オブジェクトが無効な場合、保存は失敗し、falseが返されます。

update戻りtrueまたはfalse(ドキュメントはこのことについて多くの明示的な可能性が)ない更新されたモデルインスタンス。だから、この:

@proposal = @proposal.update_attributes(status: "Sent to Client") 

trueまたはfalseとして@proposalを残すだろうし、それらのどちらもupdate_attributes方法を持っています。

お使いのコントローラのメソッドは、より次のようになります。

def send_proposal 
    #... 
    @proposal.update(status: "Sent to Client")) 
    @proposal.request.update(archived: "Proposal Sent to Client") 
    #... 
end 

あなたはおそらくあまりにもこれら2回のupdate呼び出しでチェックするいくつかのエラーをしたいです。

+0

美しい!完璧かつ素晴らしい背景情報を作業しました。ありがとう! – Liz

関連する問題