0

一个 put 自定义操作批准被添加到我们的 rails 3.1.3 应用程序的采购控制器中,用于更新 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 >

需要批准?是在采购控制器中定义的一种方法,用于查看是否需要批准采购。

这是批准的 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 回答