2017-02-20 101 views
0

我是新来的铁轨,所以我试图做到这一点,添加一个角色,使窗体更新,如果用户更新succsessfully加入角色。 注:我使用的设计,并与cancancan没有路由匹配{:action =>“partner_update”,:controller =>“users”}

路线

get 'users/becomepartner' => 'users#becomepartner' do 
    collection do 
    patch 'update_partner' 
    end 
end 

rolify,这是我的用户控制器

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> 
+0

我认为这是'update_partner',而不是'partner_update',显示你的'耙routes' – Sravan

回答

1

在表单操作中,您提到的操作为partner_update但你没有那个动作。将其更改为update_partner

您正在使用collection路线作为其他单个路由,即get 'users/becomepartner'。因此,这将生成类似以下网址的收集路线:

users/becomepartner/update_partner 

您可以通过运行rake routes来确认这一点。

但是你的表单动作url会有所不同。

你可以做的是创造用户资源的路线这里面收集路径,如:

resources :users do 
    collection do 
    patch 'update_partner' 
    end 
end 

然后在URL的form_for选项,可以使用update_partner_users_path

如果你不希望用户资源的路线,然后只是定义像一个单一路线:

get 'users/becomepartner' => 'users#becomepartner' 
patch 'user/update_partner' => 'users#update_partner' 

我还没有遇到任何验证码的,所以如果有任何语法错误,然后张贴它的评论。

+0

谢谢你,我还没有注意到它大声笑,但它仍然同样的错误。 –

+0

你的意思是,它仍然在寻找行动'partner_update'? – Sajan

+0

不,问题是一样的,但我的行为改变了你的名字,没有路由匹配{:action =>“update_partner”,:controller =>“users”} –

0
  1. routes.rb,改变 patch 'update_partner'update 'update_partner'和你不是一个collection.you工作已在do block添加删除它集合,而不是添加一个班轮航线路径。

  2. 形式

    url必须update_partner和NOT partner_update

+0

我已经改变,但它仍然无法正常工作,谢谢 –

+0

你可以从路线中删除集合,因为它是一个单一的对象...检查我更新的答案。 – Milind

相关问题