我刚刚在我的rails应用程序上安装了Devise。我遵循了Devise' github的指示。我跟着它去了我必须运行$ rails generate devise:views
的地方,它创建了几个Devise视图(会话,注册和& c)。
我的计划是使用修改后的Devise内置视图页面(Devise已经完成了创建后端机制的艰苦工作,我想保留它)。登录/登录页面将需要电子邮件和密码。它会记住我和提交按钮,就像Devise'默认登录页面。更重要的是,它将位于我的welcome/index
页面(主/根页面)
我对form_for
相当新,所以我无法理解要替换的代码。我在api.rubyonrails上的form_for上做了一些阅读。
以下是Devise'内置登录视图
app/views/devise/sessions/new.html.erb
<h2>Log in</h2>
<%= form_for(resource, as: resource_name, url: session_path(resource_name)) do |f| %>
<div class="field">
<%= f.label :email %><br />
<%= f.email_field :email, autofocus: true %>
</div>
<div class="field">
<%= f.label :password %><br />
<%= f.password_field :password, autocomplete: "off" %>
</div>
<% if devise_mapping.rememberable? -%>
<div class="field">
<%= f.check_box :remember_me %>
<%= f.label :remember_me %>
</div>
<% end -%>
<div class="actions">
<%= f.submit "Log in" %>
</div>
<% end %>
<%= render "devise/shared/links" %>
我的理论是,上面的代码应该可以在任何地方使用,只要我将form_for指向正确的类(User)和正确的路径。
我将上面的代码复制到welcome / index页面并更改了resource
。
<%= form_for :user, url: session_path(:user) do |f| %>
给了我undefined local variable or method devise_mapping for #<#<Class:0x007fd4f2e9eb38>:0x007fd4f29ea858>
错误。
好的,我删除了remember me
按钮,但现在显示undefined local variable or method resource_name for #<#<Class:0x007fd4f2e9eb38>:0x007fd4f3813358>
错误。
是否可以重复使用Devise&#39;我的欢迎/索引页面上的登录页面?如果没有,我如何在欢迎/索引上为用户的电子邮件和密码创建form_for?
答案 0 :(得分:0)
您可以在欢迎/索引页面上重复使用Devise'登录页面,但为了能够执行此操作,您必须初始化git instaweb
它会给您错误,如上所述。
在@resource, @devise_mapping ect.
application_helper.rb
这样您就可以将设计 def resource_name
:user
end
def resource
@resource ||= User.new
end
def devise_mapping
@devise_mapping ||= Devise.mappings[:user]
end
等放置在视图中的任何位置。