Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 设计产生的代码在哪里?_Ruby On Rails_Ruby_Devise - Fatal编程技术网

Ruby on rails 设计产生的代码在哪里?

Ruby on rails 设计产生的代码在哪里?,ruby-on-rails,ruby,devise,Ruby On Rails,Ruby,Devise,我将Desive gem安装到我的Rails应用程序中,并运行了Rails生成Desive:install和Rails生成Desive用户 没有我做任何事情,urlusers/sign\u-up已经有了一个视图。问题是,我在任何地方都找不到正在渲染的模板。它肯定不在app/views/users下。我在页面上选择了一些文本,并在我的应用程序中对其进行了搜索,结果为0 然后,我尝试使用表单注册,但出现以下错误: NoMethodError in Devise::RegistrationsContr

我将Desive gem安装到我的Rails应用程序中,并运行了
Rails生成Desive:install
Rails生成Desive用户

没有我做任何事情,url
users/sign\u-up
已经有了一个视图。问题是,我在任何地方都找不到正在渲染的模板。它肯定不在
app/views/users
下。我在页面上选择了一些文本,并在我的应用程序中对其进行了搜索,结果为0

然后,我尝试使用表单注册,但出现以下错误:

NoMethodError in Devise::RegistrationsController#create
undefined method `current_sign_in_ip' for #<User:xxxxxxxxxxx>
设计中的命名错误::注册控制器#创建 未定义的方法“ip中的当前符号”# 然后我搜索了这个控制器,但我的应用程序中没有RegistrationsController,也没有设计文件。我要查找的文件也不是由我上面提到的两个命令生成的

这本书似乎没有透露出设计代码保存在哪里


代码是否在我的应用程序中?我很困惑。

使用designe,您可以使用以下命令确定designe登录、密码重置等所依赖的设备:

rails generate devise:views
这将在您的
视图
目录中为designe创建模板副本

对于控制器,可以通过在自己的代码中对其子类化来实现。它们位于
designe
命名空间下:

class NewRegistrationsController < Devise::RegistrationsController
  # do stuff here
end
控制器的代码可以在Desive中找到-您可以参考它来更好地了解每个控制器正在做什么


希望有帮助

所有designe 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

所有的设计代码都可以很容易地通过,如果你正在使用rubyMine,你可以在设计文件夹的外部库中查看设计代码

为模型生成模板的步骤

rails generate devise:views

然后,您可以根据需要更改应用程序的视图。

这是Rails的标准做法(几乎所有gem都是这样)——

把它们想象成/。。。其中,它们通过几个钩子(通常由API提供)提供对大量预编译功能的访问


事实上,我推荐人们这样做的原因之一是,这有助于你了解整个事情是如何运作的,就像设计一样:

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

因此,Deave的“视图”存储在Deave gem中。这将附加到您的Ruby安装中<代码>[Ruby install dir]/lib/Ruby/gems/[ver]/gems,在运行时就像
路径
变量一样加载

虽然您可以生成Desive视图(如其他答案中所述),但这是如何在没有任何事先参考的情况下访问它们的基线


设计中的命名错误::注册控制器#创建 未定义的方法“ip中的当前符号”# 这意味着您没有Desive安装的
当前\u sign\u in \u ip
属性。我在这里特别回答了你的问题。。。

那么,如果我还没有生成模板,
用户/注册
是否在我的应用程序之外使用html?这怎么可能呢?Desive作为Rails引擎运行,所以它的所有视图都打包在gem本身中。你可以看到他们。生成器命令在视图目录中创建这些模板的副本,以便您可以随意访问/自定义它们。因此,如果我要创建自己的控制器
RegistrationsController
…这会覆盖来自gem的代码吗?是的,如果让我们用自己的自定义代码在新控制器中定义
create
操作,那么将使用该代码而不是designe的原始代码。您还可以保留控制器方法的功能,并使用
super
,在其上扩展您自己的代码-designe文档对其中一些进行了讨论,没有问题!是的,对于像Desive这样固执己见的库,为了提供覆盖和真正定制行为,有时你不得不把手弄脏一点——但我认为当涉及到身份验证时,固执己见的库并不总是一件坏事:P Desive“自动”生成的脚手架数量相当惊人,最近,由于它的默默无闻,我们决定停止在工作中使用它。您可能想研究一些替代方法,如巫术或许可(用于简单的用户名和密码验证)。@Drenmi您使用什么替代方法?现在我们使用巫术,但它有自己的一套怪癖和陷阱。我知道一些开发人员支持使用您自己的身份验证,但目前这对我们来说有点过于极端了。:-)
rails generate devise:views
NoMethodError in Devise::RegistrationsController#create
undefined method `current_sign_in_ip' for #<User:xxxxxxxxxxx>