我有两个用户模型;计划模型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'
以下是正在发生的事情的控制台屏幕截图:
似乎说它正在使用update_plan动作,但是......:S
任何有关尝试让Update_plan操作正常运行的帮助都将非常感谢!
答案 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'