Devise生成的代码在哪里?

时间:2015-10-08 04:45:38

标签: ruby-on-rails ruby devise

我将Devise gem安装到我的Rails应用程序中,然后运行rails generate devise:installrails generate devise User

如果没有我做任何事情,网址users/sign_up已经有了某种观点。问题是,我无法找到正在任何地方呈现的模板。它肯定不在app/views/users之下。我在页面上选择了一些文本并在我的应用程序中搜索了它,并得到了0个结果。

然后我尝试使用表单注册,并收到以下错误:

NoMethodError in Devise::RegistrationsController#create
undefined method `current_sign_in_ip' for #<User:xxxxxxxxxxx>

然后我搜索了这个控制器,但我的应用程序中没有RegistrationsController,也没有Devise文件。我正在寻找的文件都不是由我上面提到的两个命令生成的。

Devise documentation似乎没有说明保存Devise代码

代码甚至在我的应用程序中?我很困惑。

4 个答案:

答案 0 :(得分:3)

使用Devise,您可以generate the templates使用以下命令来设置登录,密码重置等设备所依赖的access/override their functionality

rails generate devise:views

这将在views目录中为Devise创建模板副本。

对于控制器,您可以通过在自己的代码中对它们进行子类化来source code。它们位于Devise命名空间:

class NewRegistrationsController < Devise::RegistrationsController
  # do stuff here
end

然后指示路由器使用这个新控制器:

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

控制器的代码可以在Devise的http://jenssegers.be/projects/laravel-mongodb中找到 - 您可以参考它来更好地理解每个控制器正在做什么。

希望有所帮助!

答案 1 :(得分:2)

这是Rails "engines"(几乎所有宝石都是)的标准做法 -

enter image description here

将它们视为libraries / dependencies ...其中,它们通过多个钩子(通常由API提供)提供对许多预编译功能的访问。

我实际向人们推荐write their own gem的原因之一是因为它可以帮助您了解整个过程的效果。 I wrote a gemit uses views就像设计:

enter image description here

这些视图在应用程序中看不到,因为它们在运行时附加到您的Rails应用程序。它基本上是PATH var在cmd中的工作方式,如果你曾经有幸使用程序化编译等。

因此,Devise的“视图”存储在Devise gem中。这附加到您的Ruby安装... [Ruby install dir]/lib/ruby/gems/[ver]/gems,在运行时加载,就像PATH var ...

enter image description here

虽然您可以生成您的Devise视图(如其他答案中所述),但这是它在没有任何先前引用的情况下如何访问它们的基础。

NoMethodError in Devise::RegistrationsController#create
undefined method `current_sign_in_ip' for #<User:xxxxxxxxxxx>

这意味着您没有Devise安装的current_sign_in_ip属性。我在这里具体回答了你的问题...... Devise error: undefined method `current_sign_in_ip'

答案 2 :(得分:1)

所有设计MVC文件都在gem中。下面是我的设计视图目录。你也可以查看你的。转到您的项目根目录。

gem show 'devise'
/Users/saurabh/.rvm/gems/ruby-2.1.0/gems/devise-3.2.4
cd /Users/saurabh/.rvm/gems/ruby-2.1.0/gems/devise-3.2.4/app/views

如果您想自定义,可以在项目中生成视图。

rails generate devise:views

答案 3 :(得分:0)

所有设计代码都可以通过devise轻松完成,如果您使用的是rubyMine,则可以在devise文件夹中查看外部库中的设计代码。

为您的模型生成模板

rails generate devise:views

然后您可以根据需要更改视图。