Ruby on rails 设计产生的代码在哪里?
我将Desive gem安装到我的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
Rails生成Desive:install
和Rails生成Desive用户
没有我做任何事情,urlusers/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>