我正在使用Desive gem进行登录/注销程序.

我从Desive生成了视图文件,使用了rails g devise views

我看到有一个设计/会议/新的.html.erb文件,其中包含用于登录的表格.

我创建了另一个文件designe/sessions/_表单.html.再培训局在新的一年内完成了<%= render 'form' %>项.html.erb文件,结果很好.

现在,我想包括来自不同控制器的表单.因此,在一个名为"main"的控制器中(特别是在视图页面中),main/index.html.我包括了<%= render 'devise/sessions/form' %>个文件.似乎包容效果很好,但我得到了以下错误.

NameError in Mains#index

Showing /home/administrator/Ruby/site_v4_ruby/app/views/devise/sessions/_form.html.erb where line #1 raised:

undefined local variable or method `resource' for #<#<Class:0x007f1aa042d530>:0x007f1aa042b870>
Extracted source (around line #1):

1: <%= form_for(resource, :as => resource_name, :url => session_path(resource_name)) do |f| %>
2:   <p><%= f.label :email %><br />
3:   <%= f.text_field :email %></p>
4: 

这似乎是(资源,…)的形式部分原因导致了问题(如果我在第页的原始设计符号_上,这可以正常工作……如何以rails的方式解决此问题?

我个人更喜欢使用"render"函数来包含表单,而不是内联编写html代码.

我是否必须在"主"控制器中指定某些内容(资源)?

我会感谢你的帮助.非常感谢.

推荐答案

正如Andres所说,表单会调用Desive指定的帮助程序,因此当您从非Desive控制器访问Desive表单时,这些帮助程序不存在.

为了解决这个问题,您需要将以下方法添加到希望在其下显示表单的控制器的helper类中.或者,您可以将它们添加到应用程序助手中,使其在任何地方都可用.

  def resource_name
    :user
  end

  def resource
    @resource ||= User.new
  end

  def devise_mapping
    @devise_mapping ||= Devise.mappings[:user]
  end

资料来源:http://pupeno.com/blog/show-a-devise-log-in-form-in-another-page/

Ruby-on-rails相关问答推荐

我使用rbenv安装Ruby,但我在使用";gem";->;错误:执行gem时遇到此错误.(Errno::EACCES)权限被拒绝

如何判断字符串中是否包含列值

别名可能与不同模型的相同别名有许多关联?

Rails 和 jsonb 类型jsonb不存在

如何在 Rails 3 中使用 Capybara 单击具有相同文本的第二个链接?

Rails: WickedPDF: 分页符

Rails 3 中的猴子补丁

在 PostgreSQL 中强制字符串的最大长度

如何在 Rails 中测试助手?

Rails 中是否有 HTML 安全截断方法?

测试:如何在不损失速度的情况下专注于行为而不是执行?

form_for 未定义的方法 `user_path'

在rails中带有内部文本或html的link_to image_tag

在 rails 3 中批量插入

如何在 Rails 3 中将多个属性传递给 find_or_create_by?

rbenv:没有 gemsets 生存

Active Record has_many:通过删除一条关联记录

在 Rails 协会中未找到名为的协会可能拼写错误的问题

redirect_to 和 render 是可交换的吗?

Rails: Sprockets::Rails::Helper::AssetNotPrecompiled 在开发中