0

私は私の友人のために情報システムを作成しています。そこでは(すでに)登録されたユーザーがシステム内で使用するために他のユーザーを登録することができます。すでに登録されているユーザーは、新しく登録されたユーザー(子)の「親」としても機能する必要があります。インデックスページでは、登録ユーザーは自分が登録したユーザーの情報を見ることができます。私はすでにいくつかのコードを書いています。ただし、登録済みのユーザーが別のユーザーを登録したい場合、Deviseから次のメッセージが表示されます。「既にサインインしています。」また、parent_idは現在、新しく登録されたユーザーに保存されていません。

私の質問は次のとおりです。

  • 新しく作成されたユーザーにparent_idが格納されるように、RegistrationController#createメソッドを変更するにはどうすればよいですか?
  • ユーザーにログインして新しいユーザーを登録できるように、Deviseを変更するにはどうすればよいですか?

登録/確認などにDeviseを使用しています。親子関係に使用している祖先の宝石です。

私はすでに自分のRegistrationsControllerを作成しました:class Devise :: Registrations :: RegistrationsController <Devise :: RegistrationsController

  def new
    super
  end

  def create
    super
  end

  def update
    super
  end

  def index
    @user = current_user
  end
end

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

Registrations#index.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>
4

1 に答える 1

0

親ID値をフォームからコントローラーに渡したくないのは、それがあまり安全ではないためです(htmlを編集するだけで変更できます)。

カスタムコントローラの作成アクションで、superを呼び出す前に、次を追加します。

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

また、関連付けが適切に設定されていれば、機能するはずです。

于 2012-05-27T20:52:41.623 に答える