【问题标题】:Adding new action to devise registrations_controller添加新操作以设计registrations_controller
【发布时间】:2011-01-27 19:52:59
【问题描述】:

我的主要设计路线是:

devise_for :accounts,  :controllers => { :registrations => "users/accounts/registrations", :sessions => "accounts/devise/sessions" }, :class_name => 'Admin' 

然后我想要一个新的 url/action,所以我在上面的 devise_for 行之前添加以下内容:

match '/accounts/signedup/' => 'users/accounts/registrations#signedup':

然后在控制器中我有注册操作,但是当我去 myurl.com/accounts/signedup 时,目前只有:

def signedup
    Rails.logger.debug { "&& signed_up" }
end

然后我去 myurl.com/accounts/signedup 我得到:

AbstractController::ActionNotFound (AbstractController::ActionNotFound):

但如果我从控制器中删除 def 注册,我会得到:

The action 'signedup' could not be found for Users::Accounts::RegistrationsController"

知道有什么问题吗?

【问题讨论】:

    标签: ruby-on-rails devise


    【解决方案1】:

    您的答案是正确的,但最新版本的设计已弃用此行为:

    不推荐将块传递给 devise_for。请从 devise_for 中删除块(只有块,对 devise_for 的调用必须仍然存在)并调用 devise_scope :user do ... end with the block。

    从您发布的内容来看,在您的情况下,您可能应该在自定义 RegistrationsController 中使用 after_sign_in_path_for

    这是我在项目中使用的替代方法:

      devise_scope :user do
        get 'session/on_signin', :to => 'sessions#memorize_session'
      end
    

    【讨论】:

    • 对于任何偶然发现此答案的人,请尝试 devise_scope :如果您在尝试使用 define_scope 块时收到“也许您忘记了”错误消息,请尝试。
    • 这是一个答案还是一个新问题?
    • 你需要使用 'devise_scope :user do' 而不是 'devise_scope :users do'
    • 谢谢 user2666194 和 George - 我把它改成了 'devise_scope :user do'
    【解决方案2】:

    解决方案是:

    devise_for :accounts,  :controllers => { :registrations => "users/accounts/registrations", :sessions => "accounts/devise/sessions" }, :class_name => 'Admin' do
      get "accounts/signedup", :to => "users/accounts/registrations#signedup", :as => "signedup_registration"
    end
    

    【讨论】:

    • 根据最近的设计文档:“不推荐将块传递给 devise_for。请从 devise_for 中删除块(只有块,对 devise_for 的调用必须仍然存在)并调用 devise_scope :user do .. . 以块结束。"
    【解决方案3】:

    使用下面的(确保它不是复数,否则你会得到上面的错误)。

    devise_scope :user do
      get 'session/on_signin', :to => 'sessions#memorize_session'
    end
    

    如果需要传递自定义控制器,则可以像往常一样修改 devise_for。

    devise_for :users

    【讨论】:

    • devise_scope :userdevise_scope :users?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-19
    • 1970-01-01
    • 2012-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多