我已经使用Rails App composer与Devise和Pundit创建了一个新应用。作曲家已经创建了一个表单来创建新用户(设计/注册/ 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
应该在另一个控制器中,以便我可以重复使用它。
答案 0 :(得分:1)
您要查找的资源方法位于here
资源似乎是由一个实例变量定义的,其中包含您正在使用的实际资源的名称。
因此,如果您对users
资源使用设计,则应在要呈现该部分的控制器上将资源定义为User.new
,并将其标记为helper_method
,以便它可能是DeviseController
在视图中使用,或者直接在帮助器中定义它。
或者,你可以继承已经包含资源定义和其他有用方法的{{1}}。