我将Devise gem安装到我的Rails应用程序中,然后运行rails generate devise:install
和rails 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代码 。
代码甚至在我的应用程序中?我很困惑。
答案 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"(几乎所有宝石都是)的标准做法 -
将它们视为libraries / dependencies ...其中,它们通过多个钩子(通常由API提供)提供对许多预编译功能的访问。
我实际向人们推荐write their own gem的原因之一是因为它可以帮助您了解整个过程的效果。 I wrote a gem,it uses views
就像设计:
这些视图在应用程序中看不到,因为它们在运行时附加到您的Rails应用程序。它基本上是PATH var在cmd
中的工作方式,如果你曾经有幸使用程序化编译等。
因此,Devise的“视图”存储在Devise gem中。这附加到您的Ruby安装... [Ruby install dir]/lib/ruby/gems/[ver]/gems
,在运行时加载,就像PATH
var ...
虽然您可以生成您的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
然后您可以根据需要更改视图。