Account {id, name, address, email, password, etc ...}というユーザー モデルがあり、そのユーザーが他のユーザーを作成および管理できるようにしたいと考えています。ユーザーと他の管理対象ユーザーとの関係を追跡するために、関係モデル {manager_id、care_id、関係など ...} を作成しました。基本的に、ユーザーhas_many relationships through: :relationships, source: "care_id"
. 私が理解していることから、関係を構築する前に、新しいユーザー ID を取得するために、最初に新しいユーザーを作成する必要があります。通常のユーザーは、サインアップ時に電子メール、パスワードなどの検証が必要になります...ただし、管理対象ユーザーの場合、必要なのは名前だけであり、後で他のすべてを編集することができます.
そのような機能を実装するための最良/正しい方法は何ですか。新しいコントローラーが必要ですか? または、新しいアクションをデフォルトのユーザー コントローラーに追加することはできますか? User モデルの通常の検証を行わずに新しいユーザーを作成するにはどうすればよいですか (名前、電子メール、パスワードを空にすることはできません、特定の長さでなければならないなど...)。正しいユーザー ID を使用して関係を自動的に作成するにはどうすればよいですか。あなたの助け、および/または私を正しい方向に向けてくれてありがとう。
アイデアは次のとおりです。ユーザーはサインアップして自分のアカウントを管理できます。その後、彼は「ケア」アカウントを作成できます。これは、基本的に開始するために必要なのは名前だけであり、子アカウントはログインに電子メール/パスワードを使用しないため、他の検証は必要ありません. 子アカウントが後でアクセスしたい場合、親アカウントはメール/パスワードを設定でき、完全なアカウントになります。この親アカウントであるマネージャーは、別のアカウント (おそらく配偶者) を招待して、この子アカウントの別のマネージャーとして機能させることもできます。
更新:いくつかの詳細情報:
アカウント モデル
class Account < ActiveRecord::Base
validates :email, presence: true,
format: { with: VALID_EMAIL_REGEX},
uniqueness: { case_sensitive: false },
length: { maximum: 32 },
unless: :child?
has_many :relationships, foreign_key: "manager_id", dependent: :destroy
has_many :cares, through: :relationships, source: :care
has_many :reverse_relationships, foreign_key: "care_id", class_name: "Relationship", dependent: :destroy
has_many :managers, through: :reverse_relationships, source: :manager
...
def child?
false
end
class CareUser < Account
def child?
true
end
end
関係モデル
class Relationship < ActiveRecord::Base
attr_accessible :care_id, :manager_id, :type
belongs_to :manager, class_name: "Account"
belongs_to :care, class_name: "Account"
validates :manager_id, presence: true
validates :care_id, presence: true
end
ケアコントローラー
class CaresController < ApplicationController
def index
@cares = current_user.cares
end
def new
@user = CareUser.new
@care = Relationship.new
end
def create
@user = CareUser.new(params[:first_name])
logger.info @user.inspect
if @user.save(false)
@care = current_user.relationships.build(current_user.id, @user.id, params[:relation])
if @care.save
flash[:success] = "New care has been successfully added."
else
flash[:error] = "Failed"
render action: new
end
else
flash[:error] = "Failed adding user"
render action: new
end
end
def show
end
def edit
end
def update
end
def destroy
end
end
@user = CareUser.new
、サブクラスを取得すると...が、親クラスuninitialized constant CaresController::CareUser
に設定してもエラーは表示されません。@user = Account.new
送信フォーム cares/new.html.erb
フォームを設定する正しい方法はわかりませんが、2 つのモデルに送信するため、form_tag
代わりにform_for
. 現在、問題がフォーム、モデル、またはコントローラーにあるのかどうかわからないため、フォームを正しく送信できないようです。
<div class="row">
<div class="span6 offset3">
<h1>New care</h1>
<%= form_tag("/cares", method: :post) do %>
<% if @user.errors.any? %>
<div id="error_explanation">
<div class="alert alert-error">
The form contains <%= pluralize(@user.errors.count, "errors") %>
</div>
<ul>
<% @user.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>
<% if @care.errors.any? %>
<div id="error_explanation">
<div class="alert alert-error">
The form contains <%= pluralize(@care.errors.count, "errors") %>
</div>
<ul>
<% @care.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>
<%= label_tag(:first_name, "First name:") %>
<%= text_field_tag(:first_name) %>
<%= label_tag(:relation, "Relationship") %>
<%= select_tag(:relation, options_for_select([ ["Son", "1"], ["Daughter", "2"], ["Father", "3"], ["Mother", "4"], ["Grandson", "5"], ["Granddaughter", "6"], ["Grandfather", "7"], ["Grandmother", "8"] ])) %>
<br>
<%= submit_tag("Create care account") %>
<% end %>
</div>
</div>