2012-04-10 4 views
0

3つのパラメータを更新するコントローラを調達するレール3.1.3アプリにputカスタムアクションが追加されました。カスタムルートはroutes.rbで追加され、link_toはmethod =>:putで呼び出されました。ただし、パラメータは「承認」によってリセットされません。ここでカスタムアクションを置くのがなぜレール3.1では機能しないのですか?

はソーシングindex.html.erb内のlink_toです:

<% @sourcings.each do |src| %> 
... 
<%= link_to 'Approve', approve_project_sourcing_path(@project, src), :method => :put if need_approve?(src) %> 
<% end > 

need_approve?ソーシングコントローラがソーシングを承認する必要があるかどうかを調べるために定義されたメソッドです。ここで

は、承認のためのすくいルート出力である:ここで

approve_project_sourcing PUT /projects/:project_id/sourcings/:id/approve(.:format)          {:action=>"approve", :controller=>"sourcings"} 

は調達コントローラで承認され:

def approve 

    @project = Project.find(params[:project_id]) 
    @sourcing = @project.sourcings.find(params[:id]) 
    if vp_eng? 
     @sourcing.update_attributes!(:approved_by_vp_eng => true, :approve_vp_eng_id => session[:user_id], 
            :approve_date_vp_eng => Time.now, :as => :role_update) 

     elsif ceo? 
     @sourcing.update_attributes(:approved_by_ceo => true, :approve_ceo_id => session[:user_id], 
            :approve_date_ceo => Time.now, :as => :role_update) 
    end 
    redirect_to project_sourcing_path(@project, @sourcing) 

    end 

は、我々は上記のコードで逃したものですか?本当にありがとう。

+0

上記のどの部分が正しく機能していないのですか。どのようなエラーや予期しない動作が発生しますか? – Martijn

+0

多くの不必要なコードを提供していますが、 'vp_eng?'と 'ceo? 'のどのメソッドが提供されていないのですか? – MikDiet

+0

@ sourcing.update_attributesは機能しません。これは実行されましたが、approved_by_vp_engはリセットされませんでした。 – user938363

答えて

0

問題は、update_attributesを呼び出す方法にあります。ハッシュパラメータの場合、正しい構文は次のとおりです。

@sourcing.update_attributes({:approved_by_vp_eng => true, :approve_vp_eng_id => session[:user_id],:approve_date_vp_eng => Time.now}, :as => :role_update) 

ハッシュパラメータには中かっこが必要です。

関連する問題