0

我有两个用户模型;计划模型 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 操作,而不是 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 操作发挥作用的帮助将不胜感激!

4

1 回答 1

1

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

UsersController#update

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

rake routes

可能是用户更新路线(由资源:用户创建)首先抓住了这一点:

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

对 id 的内容没有限制,格式是可选的,所以 users/update_plan 会调用 users/update 的 id 为 update_plan (实际上你可以在控制台日志截图的边缘看到这种情况,寻找:id => 参数)。

因此,我会将您的自定义路由首先移至资源:用户上方的路由文件顶部,并尝试将其更改为指向您想要的操作,不确定没有指定操作的路由会做什么......

 put '/users/update_plan',  to: 'users#update_plan'
于 2012-10-06T14:40:33.903 回答