0

と呼ばれる結合テーブルによって接続されている2つのテーブルとuserがあります。それぞれにとがあります。skilluser_skillUserSkillcurrent_proficiency_levelinterest_level

私が着るまで、すべてが完全にうまくいきましvalidates_numericality_of :current_proficiency_levelUserSkillUser編集フォームを保存しようとすると、次のエラーが発生します。数値以外の値が少なくとも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ですか?

4

0 に答える 0