2012-09-06 110 views
0

我需要在我的設計註冊表單上發送用戶選擇的實際語言的參數,並且我將其作爲params [:lang]保留在路徑中。Ruby on Rails在設計註冊和登錄時發送參數

我有一個自定義控制器,因爲我正在驗證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| %> 

,我有兩個控制器,一個用於用戶,另一個用於管理員,在成功登錄後,制定雲到用戶控制器,呼叫者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"} 
+0

您可以更具體地瞭解您正在使用哪個版本的Rails和Devise?您是否已根據Devise Examples&Readme修改您的routes.rb? – z3cko

回答

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) 

或者在路由中有默認值。