我正在使用以下模型开发 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
在提交表单时,它说用户的可验证性不能为空。但是,authenticable_id 和authenticable_type 应该在@physician
保存后立即分配。如果我使用相同的表单来编辑医生及其用户,它工作得很好,因为那时分配了 id 和 type。
我在这里做错了什么?