Ruby on rails 为什么put自定义操作在rails 3.1中不起作用?

Ruby on rails 为什么put自定义操作在rails 3.1中不起作用?,ruby-on-rails,ruby-on-rails-3.1,Ruby On Rails,Ruby On Rails 3.1,在sourcing controller中,我们的rails 3.1.3应用程序中添加了一个put自定义操作approve,用于更新3个参数。在routes.rb中添加了自定义路由,并使用:method=>:put调用了链接_to。但是,“批准”按钮不会重置参数 以下是指向in-sourcing index.html.erb的链接: <% @sourcings.each do |src| %> ... <%= link_to 'Approve', approve_project

在sourcing controller中,我们的rails 3.1.3应用程序中添加了一个put自定义操作approve,用于更新3个参数。在routes.rb中添加了自定义路由,并使用:method=>:put调用了链接_to。但是,“批准”按钮不会重置参数

以下是指向in-sourcing index.html.erb的链接:

<% @sourcings.each do |src| %>
...
<%= link_to 'Approve', approve_project_sourcing_path(@project, src), :method => :put if need_approve?(src) %>
<% end >
以下是采购内批准控制员:

  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\u属性的方法。对于哈希参数,正确的语法是:

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

散列参数需要大括号

确切地说,上面哪部分不起作用?您得到了什么错误或未执行的行为?您向我们提供了许多不必要的代码,但没有提供什么方法
vp_eng?
ceo?
are@sourcing.update_attributes不起作用。已执行,但:由vp\U eng批准的未重置。vp\U eng?首席执行官呢?正如上面所说的。这意味着,如果你是工程副总裁兼首席执行官,那么你可以在其中执行代码。如果代码已执行,你为什么要询问put操作?如果它被执行,那么put操作就起作用了
@sourcing.update_attributes({:approved_by_vp_eng => true, :approve_vp_eng_id => session[:user_id],:approve_date_vp_eng => Time.now}, :as => :role_update)