Ruby on rails 没有路由匹配{:action=>;“partner”update,“controller=>;“users”}
我是rails新手,所以我尝试添加一个角色,制作一个表单进行更新,如果用户更新成功,则添加角色。 注意:我正在使用Desive and rolify与cancancan 路线Ruby on rails 没有路由匹配{:action=>;“partner”update,“controller=>;“users”},ruby-on-rails,devise,Ruby On Rails,Devise,我是rails新手,所以我尝试添加一个角色,制作一个表单进行更新,如果用户更新成功,则添加角色。 注意:我正在使用Desive and rolify与cancancan 路线 get 'users/becomepartner' => 'users#becomepartner' do collection do patch 'update_partner' end end 这是我的用户控制器 def becomepartner @user = current_us
get 'users/becomepartner' => 'users#becomepartner' do
collection do
patch 'update_partner'
end
end
这是我的用户控制器
def becomepartner
@user = current_user
end
def update_partner
@user = User.find(current_user.id)
if @user.update_with_password(partner_params)
self.add_role(:partner)
# Sign in the user by passing validation in case their password changed
bypass_sign_in(@user)
redirect_to root_path, notice: 'now you can create'
else
render :becomepartner
end
end
private
def partner_params
# NOTE: Using `strong_parameters` gem
params.require(:user).permit(:name, :style, :current_password, :email)
end
这是我的观点becomepartner.html
<div>
<%= form_for(@user, :url => { :action => "update_partner" } ) do |f| %>
<div class="field">
<%= f.label :style %>
<%= f.text_field :style %>
</div>
<div class="field">
<%= f.label :name %>
<%= f.text_field :name %>
</div>
<div class="field">
<%= f.label :email %>
<%= f.email_field :email %>
</div>
<div class="field">
<%= f.label :current_password %> <i>(we need your current password to confirm your changes)</i>
<%= f.password_field :current_password, autocomplete: "off" %>
</div>
<% end %>
</div>
{:action=>“update_partner”})do | f |%>
(我们需要您的当前密码来确认您的更改)
在表单操作中,您将操作称为“合作伙伴更新”,但您没有该操作。将其更改为update\u partner
您正在为另一个单独的路由使用集合
路由,即get'users/becomepartner'
。因此,这将生成url如下的收集路由:
users/becomepartner/update_partner
您可以通过运行rake routes
来确认这一点
但您的表单操作url将不同
您可以在用户资源路由内创建此收集路由,如:
resources :users do
collection do
patch 'update_partner'
end
end
get 'users/becomepartner' => 'users#becomepartner'
patch 'user/update_partner' => 'users#update_partner'
然后在form\u for url选项中,使用update\u partner\u users\u path
如果不需要用户资源路由,只需定义一个路由,如:
resources :users do
collection do
patch 'update_partner'
end
end
get 'users/becomepartner' => 'users#becomepartner'
patch 'user/update_partner' => 'users#update_partner'
我还没有运行任何这段代码,所以如果有任何语法错误,请在注释中发布它
routes.rb
中,更改
将“更新合作伙伴”
修补到更新“更新合作伙伴”
并删除集合,因为您没有对集合进行操作。您已将其添加到do块中,而不是添加一条线性路由路径
url
必须是update\u partner
而不是partner\u update
我想它是
update\u partner
而不是partner\u update
,显示你的rake routes
谢谢你,我没有注意到它LOL,但它仍然是同一个错误。你的意思是,它仍然在搜索动作partner\u update
?不,问题是一样的,但动作的名称我已经像你说的那样改变了,没有与之匹配的路由{:action=>“update_partner”,:controller=>“users”}您是否可以从路由中删除集合,因为它是单个对象…请检查我的更新答案。