と呼ばれる結合テーブルによって接続されている2つのテーブルとuserがあります。それぞれにとがあります。skilluser_skillUserSkillcurrent_proficiency_levelinterest_level
私が着るまで、すべてが完全にうまくいきましvalidates_numericality_of :current_proficiency_levelたUserSkill。User編集フォームを保存しようとすると、次のエラーが発生します。数値以外の値が少なくとも1つある場合にのみ、エラーが発生しますcurrent_proficiency_level。すべてが有効な場合、それはうまく保存されます。
1つ以上の新しいレコードを保存できなかったため、user_skillsを置き換えることができませんでした。
これは、UserSkillを保存しようとしたときにレコードが検証されていない可能性があることを示していUserます。これが私のUserクラスです(わかりやすくするために無関係なコードは省略されています):
class User < ActiveRecord::Base
has_many :posts
has_many :user_skills
has_many :skills, :through => :user_skills
validates_associated :user_skills
def attach_skills(current_proficiency_levels, interest_levels)
self.user_skills.destroy_all
self.user_skills = Skill.all.map { |skill|
user_skill = UserSkill.find_or_create_by_user_id_and_skill_id(self.id, skill.id)
user_skill.assign_attributes(
:current_proficiency_level => current_proficiency_levels[skill.id.to_s].negative_if_blank,
:interest_level => interest_levels[skill.id.to_s].negative_if_blank
)
user_skill
}
end
end
そして、これが私のUserSkillクラスです。ここでは何も省略していません。とても短いです。
class UserSkill < ActiveRecord::Base
belongs_to :user
belongs_to :skill
validates_numericality_of :current_proficiency_level
validates_numericality_of :interest_level
end
validates_numericality_of保存したときに実行されないのはなぜUserですか?