0

我需要在我的设计注册表单上发送用户选择的实际语言的参数,并将其作为参数 [:lang] 保留在路由中。

我有一个自定义控制器,因为我正在验证 reCaptcha(该部分有效)。

所以我有我的路线:

    devise_for :users, controllers: { registrations: 'registrations' }

    devise_for :users do
         root :to => "devise/registrations#new"
         get "/" => "devise/registrations#new"
         post '/' => 'registrations#new', :as => :new_user_registration 
         match '/', :to => 'devise/registrations#new'
         get "/logout", :to => "devise/sessions#destroy", :as => "logout"
    end

    #Sign
    match '/:lang/:sec/sign' => 'frontend#sign', :as => :sign

在我的注册表中:

   <%= form_for(resource, :as => resource_name, :url => 
   registration_path(resource_name, :lang => params[:lang], :sec => params[:sec])) 
   do |f| %>

我有两个控制器,一个用于用户,另一个用于管理员,成功登录后,Devise 转到用户控制器,调用者 Restringido 并想知道用户是验证为管理员还是仅是普通用户。

在我的 restringido 控制器中:

    class RestringidoController < ApplicationController

    before_filter :verify_is_user

    def verify_is_user
       if current_user.try(:admin?)
       #redireccionar a backend
       redirect_to :controller => "backend", :action => "index"
    elsif current_user
       #mantenerte en este controlador
    else
       redirect_to :controller => "frontend", :action => "sign"
    end

我的管理员后端控制器:

    before_filter :verify_is_admin

    def verify_is_admin
       if current_user.admin?
    else
       redirect_to root_path
    end

错误是:

    No route matches {:controller=>"frontend", :action=>"sign"}
4

1 回答 1

0

你的路线:

match '/:lang/:sec/sign' => 'frontend#sign', :as => :sign

需要设置:lang变量,并且您没有提供默认值。所以控制器中的这个调用:

redirect_to :controller => "frontend", :action => "sign"

将无法匹配路线,因为您没有提供:lang变量

要解决此问题,您可以:lang在控制器中提供值,例如:

redirect_to :controller => "frontend", :action => "sign", :lang => (params[:lang] || DEFAULT_LANG)

或者在路由中有一个默认值。

于 2012-09-12T00:56:00.070 回答