在Rails中自定义Devise视图

Vas*_*rth 70 views ruby-on-rails devise

我正在使用设计用户身份验证,但我有很好的模型用于注册,登录等页面.我已经完成了rails generate devise:views User命令并拥有了views文件夹中的所有视图,但是,当我用自己的new.html.erb替换registration/new.html.erb时,没有任何变化也没有看起来不同.就好像我做了什么.

任何人都知道我做错了什么或者至少知道如何成功定制设计视图

PS重要的是要注意我改变了设计路线/注册#new to/signup?

oco*_*odo 119

一目了然的答案.

...代替

rails generate devise:views User
Run Code Online (Sandbox Code Playgroud)

使用:

rails generate devise:views
Run Code Online (Sandbox Code Playgroud)

如果您已经完成了,请将创建的文件夹设置移动app/views/User到新文件夹app/views/devise(或者只是将User文件夹重命名为devise,如果这是一个选项.)

这些文件夹是:

app/views/User/confirmations
app/views/User/mailer
app/views/User/passwords
app/views/User/registrations
app/views/User/sessions
app/views/User/shared
app/views/User/unlocks
Run Code Online (Sandbox Code Playgroud)

不需要进行其他更改.

  • 如果您只有**模型用于身份验证**,那么这就是答案.如果您有两个用于身份验证的模型,比如**`users`**和**`admins`**,您将不得不通过@QBDSolutions获得以下答案 (6认同)
  • *这个*就是答案.默认情况下,您无法编辑设计视图,因为它们位于gem内部,直到您生成它为止.谢谢. (3认同)
  • 如果要从特定控制器自定义视图,请添加`-v`选项,如下所示:`rails generate devise:views -v registrations confirmmations` (3认同)

Daz*_*win 105

虽然这是一个古老的问题,我想我会添加它,万一有人偶然发现它.我不确定这是一个新的添加,因为最初问的问题,但如果是这样,更简单(更现代)的方法是这样.

在文件中config/initializers/devise.rb有以下代码块:

# ==> Scopes configuration
# Turn scoped views on. Before rendering "sessions/new", it will first check for
# "users/sessions/new". It's turned off by default because it's slower if you
# are using only default views.
# config.scoped_views = false
Run Code Online (Sandbox Code Playgroud)

通过取消注释config.scoped_views = false并更改其值true,设计将自动检查自定义视图是否存在,如果存在,则将其提供.正如它所说它确实增加了应用程序的一些开销,但根据我的经验到目前为止,这是最小的.

  • 这应该被标记为解决方案,因为它正确地解决了原始问题. (4认同)
  • 实际上,如果**实际上是在定义自定义视图,那么将此选项设置为true不会**增加开销**.我想你可能误解了文件中评论的含义.它实际指出的是,默认情况下,没有理由打开自定义视图.因此,如果你打开它们并且实际上没有定义新的视图,它会看它是否存在,**然后**它将回退到默认值,这将导致开销.因此,只要您定义自定义视图,理论上将此选项设置为true就不应添加任何开销. (4认同)
  • 谢谢!我一直试图想出如何激活我的"自定义"视图,直到我遇到你的答案. (3认同)

Kev*_*soi 31

您的路线signupdevise/registrations#new将呈现视图 views/devise/registrations/new.html.erb.这听起来像你做了更改views/user/registrations/new.html.erb,这可以解释为什么你没有看到自从没有渲染以来所做的更改.

您将需要创建一个user/registrations_controller.rbDevise::RegistrationsController您的/signup 路径延伸并指向您的路线user/registrations#new,或者您可以直接进行更改views/devise/registrations/new.html.erb

同样的想法适用于您的login(devise/sessions)页面.

希望这可以帮助.

  • rails generate devise:views用户已经为您生成了/ users/registrations已经正确吗?如果您还有管理员角色,那么您还需要生成管理员视图(rails generate devise:views admin). (3认同)

Mar*_*s W 25

对于仍然有这个问题的人来说,问题出在于调用rails generate devise:views User.它应该是rails generate devise:views从Devise Rails Engine获取当前视图.这将生成适用于默认路由的正确视图.


Saq*_* R. 19

生成自定义视图后,例如

rails generate devise:views User
Run Code Online (Sandbox Code Playgroud)

开启scoped_viewsconfig/initializer/devise.rb

view config.scoped_views = true
Run Code Online (Sandbox Code Playgroud)

你完成了.


gue*_*o64 11

我有同样的问题,直到我回去阅读设计文档:)

之后rails generate devise:views确保你进入initializers/devise.rb和设置config.scoped_views = true.这可以在https://github.com/plataformatec/devise的设计文档以及devise.rb注释中解释.

在我这样做之后,我自己的观点views/users开始出现而不是宝石中的观点.


小智 10

使用rails g devise:views User允许您自定义何时有多个角色.

正确的方法是进入你devise.rbconfig/initializer/文件夹

并取消注释和设置config.scoped_views = true.

现在您可以毫无问题地编辑视图erb文件