0
이 간단한 검증 테스트는 실패 :실패 사용자 확인 및 다형성 협회
require 'test_helper'
class UserTest < ActiveSupport::TestCase
def setup
@user = User.new(name: "Example User",
email: "[email protected]",
character_attributes: {callsign: "example"},
password: "foobar",
password_confirmation: "foobar"
)
end
test "should be valid" do
assert @user.valid?, "#{@user.errors.messages}"
end
end
...이 메시지와 함께 : UserTest에서 사용자 생성이 왜 character.sociable_id"=>["can't be blank"]
는 이해가 안 돼요 유효한 사용자를 만들지 못했습니다.
각 사용자 has_one :character
및 각 문자 belongs_to
사용자.
사용자 모델 : User.rb :
class User < ActiveRecord::Base
attr_accessor :remember_token, :activation_token, :reset_token
has_one :character, as: :sociable, dependent: :destroy
accepts_nested_attributes_for :character
has_secure_password
before_validation do
self.create_character unless character
end
before_save do
self.email.downcase!
end
before_create :create_activation_digest
validates :name, presence: true,
length: { maximum: 50 }
VALID_EMAIL_REGEX = /\A[\w+\-.][email protected][a-z\d\-]+(?:\.[a-z\d\-]+)*\.[a-z]+\z/i
validates :email, presence: true,
format: { with: VALID_EMAIL_REGEX },
uniqueness: { case_sensitive: false }
validates :password, length: { minimum: 6 }, allow_blank: true
validates :character, presence: true
.
.
end
되는 문자 모델 : Character.rb :
class Character < ActiveRecord::Base
belongs_to :sociable, polymorphic: true
has_many :posts, dependent: :destroy
before_save do
self.callsign.downcase!
end
validates :sociable_id, presence: true
VALID_CALLSIGN_REGEX = /\A[a-z\d\-.\_]+\z/i
validates :callsign, presence: true,
length: { maximum: 20 },
format: { with: VALID_CALLSIGN_REGEX },
uniqueness: { case_sensitive: false }
end
감사합니다, character.Sociable_id를 비워 둘 수 없다는 사실이 밝혀졌습니다. 나는 캐릭터가 저장 될 때까지 sociable_id가 설정되지 않았기 때문에 실패했다고 생각한다. – Bazley