0

3 つのパラメーターを更新するために、ソース コントローラーの Rails 3.1.3 アプリに put カスタム アクションの承認が追加されました。カスタム ルートが routes.rb に追加され、link_to が :method => :put で呼び出されました。ただし、パラメータは「承認」によってリセットされません。

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 >

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

承認用の rake ルート出力は次のとおりです。

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

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

4

1 に答える 1

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)

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

于 2012-04-11T18:20:03.427 に答える