新手问题 ruby-china 源码中 class AccountController < Devise::RegistrationsController 是如何生成的?

afayear · 2016年01月10日 · 最后由 cassiuschen 回复于 2016年01月11日 · 1724 次阅读

新手在看 ruby-china 源码,有个疑问 AccountController 是如何生成的?相比一般的 Controller,比如 HomeController < ApplicationController,有啥区别? class AccountController < Devise::RegistrationsController

https://github.com/plataformatec/devise

另外,如果看不懂就别看好了,干嘛非得都理解到

继承自 DeviseController

class Devise::RegistrationsController < DeviseController

DeviseController 继承自 ApplicationController,parent_controller 方法返回字符串"ApplicationController",constantize 转成类名。

class DeviseController < Devise.parent_controller.constantize
  ....
end

module Devise
  ...
  # The parent controller all Devise controllers inherits from.
  # Defaults to ApplicationController. This should be set early
  # in the initialization process and should be set to a string.
  mattr_accessor :parent_controller
  @@parent_controller = "ApplicationController"
  ...
end

也就是说它是 ApplicationController 的扩展,为了让我们使用 Devise 起来更顺手,在中间加入了大量的魔法,使得 Devise 和 Rails 一样的 automagical。

Devise 是个巨坑,想理解推荐先看大神 José Valim 的书《Crafting Rails 4 Applications》,我也正在学习中。。。

首先略激动,每次遇到问题,都能得到坛主的回应。我现在就是想着一步步,能把 ruby-china 的功能对照着,能复制出来,不奢望能看懂。遇到问题是:HomeController < ApplicationController 这种的我会用 rails g controller 生成,但是 class AccountController < Devise::RegistrationsController,我都完全不懂了,不知道如何生成的?搜不到也。 #1 楼 @huacnlee

#2 楼 @adamshen 不知道你咋学的?我是断断续续的学,好多地方很难懂(本身是 java,不知道和这有关系没),还好论坛里大家都很热情。谢谢了。

#5 楼 @rei 你这个方法赞……

#3 楼 @afayear 自动生成 Controller 大多数时候都不怎么方便,像这种一般都是手粘或者手写……然后 LZ 可能要知道的 Rails 中可以随时可以打开类、复写方法什么的……

需要 登录 后方可回复, 如果你还没有账号请 注册新账号