在不同的控制器内设计形式

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (18)

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

我看到有一个Design/session/new.html.erb文件,其中包含一个用于签名的表单_在里面。

我创建了另一个文件Design/Session/_form.html.erb和<%= render 'form' %>在new.html.erb文件中,结果非常好。

现在,我想从不同的控制器中包含这个表单。因此,在一个名为‘main’的控制器中,(具体来说,在视图页内)‘mains/index.html.erb’i包括<%= 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代码。

我是否必须在“主”控制器中指定某种东西(资源)?

提问于
用户回答回答于

表单调用由Designer指定的帮助程序,因此当从非设计控制器访问设计表单时不存在。

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

  def resource_name
    :user
  end

  def resource
    @resource ||= User.new
  end

  def devise_mapping
    @devise_mapping ||= Devise.mappings[:user]
  end
用户回答回答于

<%= form_for("user", :url => user_session_path) do |f| %>
  <%= f.text_field :email %>
  <%= f.password_field :password %>
  <%= f.check_box :remember_me %>
  <%= f.label :remember_me %>
  <%= f.submit 'Sign in' %>
  <%= link_to "Forgot your password?", new_password_path('user') %>
<% end %> 

扫码关注云+社区