簡體   English   中英

為什么自定義操作在 Rails 3.1 中不起作用?

[英]Why put custom action does not work in rails 3.1?

將自定義操作批准添加到我們的 rails 3.1.3 應用程序中采購 controller 以更新 3 個參數。 在 routes.rb 中添加了自定義路由,並使用 :method =>:put 調用了 link_to。 但是,“批准”不會重置參數。

這是采購 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 >

需要批准? 是sourcings controller中定義的一種方法,用於查看sourcing是否需要被批准。

這是 rake 路線 output 批准:

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

這是采購 controller 的批准:

  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

我們在上面的代碼中遺漏了什么嗎? 非常感謝。

問題在於調用 update_attributes 的方式。 使用 hash 參數,正確的語法是:

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

hash 參數需要一個大括號。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM