user.addresses << Address.new
Этот код не будет работать в любом случае, если ваша модель адреса требует, чтобы ее поля были установлены, потому что вы не предоставляете хэш для Address.new
Если вы хотите добавить адрес условно, вы, вероятно, хотите что-то вроде этого:
if !params[:address].blank?
user.addresses.create(params[:address])
end
или
user.addresses << Address.new(params[:address]) unless params[:address].blank
Если вы действительно хотите создать «пустой» адресный объект для каждого пользователя (вместо того, чтобы просто иметь пользователей без адресов), вы можете изменить проверки, чтобы они запускались только при заполнении полей.
Примерно так:
class Address < ActiveRecord::Base
validates_presence_of :address1, :if => :non_empty_address?
# etc
private
def non_empty_address?
!address1.blank? || !address2.blank || !city.blank? # etc
end
end
Плагин restful_authentication использует аналогичный подход, чтобы определить, требуется ли пароль пользователя.