67732


受け取った user_id が FK として存在してるかバリデーションしたいのですが

[code]

      belongs_to :user, foreign_key: :user_id 
      validates :user, presence: { message: 'エラーテスト' }
    
[/code]

とかいてしまうと form からは user_id というキーでパラメータが飛んでくるのでフォームの色が変わってくれません

[code]

      validates :user_id, presence: true, if: -> { user.present? }
    
[/code]

とかけばバリデーションはうまくいくのですがさらにメッセージを変えるにはどうすればいいんでしょうか

[code]

      validates :user_id, presence: { message: 'エラーテスト' }, if: -> { user.present? }
    
[/code]

と書いてしまうと存在しないFKも保存されてしまいバリデーションがうまく行きません

FKによるバリデーションはこちらを参考にしました  
<https://qiita.com/ledsun/items/25823f5addc41459b6b8>


CC BY-SA 4.0
2020-06-16T11:47:17.523
67725
2020-06-16T14:42:04.143
question
ruby-on-rails
アソシエーションでバリデーションしつつメッセージを変更する方法


スマートな方法かはわからないですが  
カスタムバリデーションを使えば何とでもなると思います

[code]

    validate present_user
    
    def present_user
      errors.add(:user_id, :user_not_exists) if users.nil?
    end
    
[/code]


CC BY-SA 4.0
2020-06-16T14:42:04.143
67732
2020-06-16T14:42:04.143
67725
answer