3

我已经使用带有 Devise 和 Pundit的Rails App composer创建了一个新应用程序。作曲家创建了一个表单来创建新用户(devise/registrations/new.html.erb),我想制作一个部分,以便我可以将它放在其他页面上。形式是

  <%= form_for(resource, :as => resource_name, :url => registration_path(resource_name), :html => { :role => 'form'}) do |f| %>
    <h3>Sign up</h3>
    <%= devise_error_messages! %>
    <div class="form-group">
      <%= f.label :email %>
      <%= f.email_field :email, :autofocus => true, required: true, class: 'form-control' %>
    </div>
    <div class="form-group">
      <%= f.label :password %>
      <%= f.password_field :password, class: 'form-control' %>
    </div>
    <div class="form-group">
      <%= f.label :password_confirmation %>
      <%= f.password_field :password_confirmation, class: 'form-control' %>
    </div>ate_field :date_of_birth, class: 'form-control' %>
    </div>
     <%= f.submit 'Sign up', :class => 'button right' %>
  <% end %>

如果我把它放在一个部分并尝试在另一个页面上呈现它,我会得到

undefined local variable or method `resource

这显然是因为在我的控制器中我没有定义任何东西。问题是我找不到控制器或resource其他控制器中应该有什么,以便我可以重新使用它。

4

1 回答 1

1

您要查找的资源方法位于此处

资源似乎是由一个实例变量定义的,该变量具有您正在使用的实际资源的名称。

因此,如果您对资源使用设计,您应该在要渲染该部分的控制器上users定义资源,并将其标记为可以在视图中使用,或者直接在帮助程序中定义它。User.newhelper_method

或者,您可以只继承DeviseController已经包含资源定义和其他有用方法的方法。

于 2014-09-02T21:14:16.040 回答