2012-05-27 67 views
0

我正在为我的一位朋友创建一个信息系统,已经(已经)注册的用户可以注册其他用户在系统中使用。已经注册的用户还必须充当新注册用户(这是孩子)的“父母”。 在索引页上,注册用户可以看到他/她注册的用户信息。 我已经写了一些代码。但是,当注册用户想要注册另一个用户时,我会从Devise获得以下消息:“您已经登录。”此外,parent_id当前未保存在新注册的用户中。如何让注册用户使用Devise注册其他用户?

我的问题是:

  • 如何修改我这个RegistrationController#创建方法,以便PARENT_ID存储在新创建的用户?
  • 如何修改Devise,以便在用户中登录可以注册新用户?

我正在使用设计注册/确认等 祖先宝石我用于亲子关系。

我已经创建了自己的RegistrationsController: 类设计::注册记忆:: RegistrationsController <设计:: RegistrationsController

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" %> 

注册记忆# index.html.erb文件:

<% title "Geregistreerde owners" %> 

<% if @user.blank? || [email protected]_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> 

回答

0

您不想将表单中的parent_id值传递给控制器​​,因为这不是非常安全(可以通过简单编辑html来更改)。

在您的自定义控制器的创建行动,您的通话超之前,补充一点:

params[:user][:parent_id] = current_user.id if current_user

而且,假设你有你的协会正确设置,它应该工作。

+0

@rolfmao,谢谢!你是否也知道如何让Devise让已经注册的用户注册新用户? – Nazeem

+0

我会创建一个完全独立的控制器来做到这一点。 – roflmao