我正在为我的一个朋友创建一个信息系统,(已经)注册用户可以在其中注册其他用户以在系统内使用。已注册的用户还必须充当新注册用户(即子用户)的"父用户"。在索引页面上,注册用户可以看到他/她注册的用户的信息。我已经写了一些代码。但是,当注册用户想要注册其他用户时,我会收到来自 Devise 的以下消息:"您已登录。此外,parent_id当前未保存在新注册的用户中。
我的问题是:
- 如何修改我的注册控制器#创建方法,以便将parent_id存储在新创建的用户中?
- 如何修改 Devise 以便登录用户可以注册新用户?
我正在使用 Devise 进行注册/确认等。我用于父子关系的祖先宝石。
我已经创建了自己的注册控制器:类设计::注册::注册控制器 <设计::注册控制器>
def new
super
end
def create
super
end
def update
super
end
def index
@user = current_user
end
end
注册#new.html.erb 文件:
<% title "Owner registreren" %>
<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %>
<%= devise_error_messages! %>
<%= f.hidden_field :parent_id %>
<div><%= f.label :email, "Email adres" %><br />
<%= f.email_field :email %></div>
<div><%= f.label :password, "Wachtwoord" %><br />
<%= f.password_field :password %></div>
<div><%= f.label :password_confirmation, "Wachtwoord (bevestiging)" %><br />
<%= f.password_field :password_confirmation %></div>
<div><%= f.submit "Registreer" %></div>
<% end %>
<%= render :partial => "devise/shared/links" %>
注册#索引.html.erb 文件:
<% title "Geregistreerde owners" %>
<% if @user.blank? || !@user.has_children? %>
<p>U heeft geen owners geregistreerd</p>
<% else %>
<table>
<tr>
<th>Email adres</th>
</tr>
<% for user in @user.children %>
<tr>
<td><%= child.email %></td>
<td><%= link_to "Weergeven", child %></td>
<td><%= link_to "Bewerken", edit_user_registration_path(user) %></td>
<td><%= link_to "Verwijderen", product, :confirm => 'Weet u het zeker?', :method => :delete %></td>
</tr>
<% end %>
</table>
<% end %>
<p><%= link_to "Nieuwe owner registreren", new_user_registration_path %></p>
您不希望将parent_id值从表单传递到控制器,因为这不是很安全(可以通过简单地编辑html来更改)。
在自定义控制器的创建操作中,在调用 super 之前,添加以下内容:
params[:user][:parent_id] = current_user.id if current_user
而且,假设您正确设置了关联,它应该可以工作。