【问题标题】:Why put custom action does not work in rails 3.1?为什么 put custom action 在 rails 3.1 中不起作用?
【发布时间】:2012-04-10 15:09:17
【问题描述】:

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

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

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

我们在上面的代码中遗漏了什么吗?非常感谢。

【问题讨论】:

  • 以上哪一部分不起作用,究竟是什么?您会遇到什么错误或意外行为?
  • 你给我们提供了很多不必要的代码,却没有提供vp_eng?ceo?是什么方法
  • @sourcing.update_attributes 不起作用。它已执行,但 :approved_by_vp_eng 未重置。
  • vp_eng?和首席执行官?就像它说的那样。这意味着如果你是工程副总裁和首席执行官,那么你可以在其中执行代码。
  • 如果它被执行了,你为什么要问 put 动作?如果它被执行了,那么 put 动作就起作用了

标签: ruby-on-rails ruby-on-rails-3.1


【解决方案1】:

问题在于调用 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)

散列参数需要大括号。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-03
    • 1970-01-01
    • 1970-01-01
    • 2011-09-30
    • 2022-06-13
    • 2020-09-02
    相关资源
    最近更新 更多