Я разрабатываю приложение 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
И это мой метод create:
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
. Он отлично работает, если я использую одну и ту же форму для редактирования врача и его пользователя, так как тогда назначаются идентификатор и тип.
Что я здесь делаю неправильно?