複数のモデルを持つコントローラーのフォームと作成アクションの設定について、助けが必要です。現在、フォームは送信されますが、何も処理または記録されず、エラーも表示されません。
アイデアは次のとおりです。ユーザーはサインアップして自分のアカウントを管理できます。その後、彼は「ケア」アカウントを作成できます。これは、基本的に開始するために必要なのは名前だけであり、子アカウントはログインに電子メール/パスワードを使用しないため、他の検証は必要ありません. 子アカウントが後でアクセスしたい場合、親アカウントはメール/パスワードを設定でき、完全なアカウントになります。この親アカウントであるマネージャーは、別のアカウント (おそらく配偶者) を招待して、この子アカウントの別のマネージャーとして機能させることもできます。
よろしくお願いいたします。
アカウント モデル
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>