次のモデルを使用して Rails 3.2 アプリケーションを開発しています。
class User < ActiveRecord::Base
# Associations
belongs_to :authenticatable, polymorphic: true
# Validations
validates :authenticatable, presence: true # this is the critical line
end
class Physician < ActiveRecord::Base
attr_accessible :user_attributes
# Associations
has_one :user, as: :authenticatable
accepts_nested_attributes_for :user
end
私がやろうとしているのは、ユーザーが常に認証可能な親を持っているかどうかを検証することです。これ自体は問題なく動作しますが、私のフォームでは、ユーザー モデルは認証対象が存在しないと不平を言っています。
次のコントローラーを使用して、ユーザーのネストされた属性を受け入れる新しい医師のフォームを表示しています。
def new
@physician = Physician.new
@physician.build_user
respond_to do |format|
format.html # new.html.erb
format.json { render json: @physician }
end
end
そして、これは私の作成方法です:
def create
@physician = Physician.new(params[:physician])
respond_to do |format|
if @physician.save
format.html { redirect_to @physician, notice: 'Physician was successfully created.' }
format.json { render json: @physician, status: :created, location: @physician }
else
format.html { render action: "new" }
format.json { render json: @physician.errors, status: :unprocessable_entity }
end
end
end
フォームを送信すると、ユーザーの認証可能なものを空にしてはならないことが示されます。ただし、authenticatable_id とauthenticatable_type は、@physician
保存後すぐに割り当てる必要があります。同じフォームを使用して医師とそのユーザーを編集すると、id とタイプが割り当てられるため、問題なく動作します。
ここで何が間違っていますか?