表格发送到错误的PUT请求

时间:2012-10-06 14:31:37

标签: ruby-on-rails ruby

我有两个用户模型;计划模型has_many用户。现在,我想做的是允许用户通过更改plan_id来升级/降级他们的计划。我已经设置了一个表单以及相应的操作,但是当我点击提交时,它似乎没有按照PUT操作所说的那样做。它似乎使用更新操作。

这是我的表格:

                       <%= form_tag("/users/update_plan", :method => "put" ) do %>

                        <%= hidden_field_tag :plan_id, plan.id %>

                        <%= submit_tag("Change To Plan", :class => "signup") %>


                      <% end %>

这是我的更新操作

  def update_plan
   @user = current_user
   @user.plan_id = params[:plan_id]
   @user.save
   sign_in @user
   redirect_to change_plan
  end   

当我提交上面的表单时,它不仅没有注册更改,而且我认为它使用更新操作,而不是update_plan操作。我认为这是因为它重定向到更新操作中的内容,并且它与更新操作闪烁相同。

  def update
    @user = current_user
    if @user.update_attributes(params[:user])
      flash[:success] = "Profile updated"
      sign_in @user
      redirect_to edit_user_path(@user)
    else
      render 'edit'
    end
  end    

这是我的routes.rb文件

Dentist::Application.routes.draw do

  resources :users
  resources :sessions, only: [:new, :create, :destroy]
  resources :phones, only: [:new, :create, :destroy]
  resources :find_numbers, only: [:new, :create, :destroy]  

  put 'users/update_plan'
  match '/signup',  to: 'users#new'
  match '/login',  to: 'sessions#new'
  match '/signout', to: 'sessions#destroy', via: :delete
  match '/change_plan',  to: 'users#change_plan'

  root  to: 'static_pages#home'

  match '/product_demo', to: 'static_pages#product_demo'

  match '/pricing', to: 'plans#index'

  match '/contact', to: 'static_pages#contact'

以下是正在发生的事情的控制台屏幕截图:

http://stepanp.com/debug3.jpg

似乎说它正在使用update_plan动作,但是......:S

任何有关尝试让Update_plan操作正常运行的帮助都将非常感谢!

1 个答案:

答案 0 :(得分:1)

表单到了正确的位置(/ users / update_plan),但是它被路由到:

UsersController#update
正如它在控制台日志的第二行所说的那样。所以不是你期望的行动,问题出在你的路线上。试试这个列出你所有的路线:

rake routes

用户更新路由(由资源:用户创建)可能首先捕获此信息:

PUT    /users/:id(.:format)                                   users#update

id的内容没有限制,格式是可选的,因此users / update_plan会调用user / update,其id为update_plan(实际上你可以看到这发生在你的控制台日志截图的边缘,寻找:id ​​=&gt;参数)。

因此,我会将您的自定义路由首先移至路径文件的顶部,首先是资源:用户,并尝试将其更改为指向您想要的操作,不确定未指定操作的路由是什么... < / p>

 put '/users/update_plan',  to: 'users#update_plan'