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

```

      belongs_to :user, foreign_key: :user_id 
      validates :user, presence: { message: 'エラーテスト' }
    
```

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

```

      validates :user_id, presence: true, if: -> { user.present? }
    
```

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

```

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

と書いてしまうと存在しない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
アソシエーションでバリデーションしつつメッセージを変更する方法
スマートな方法かはわからないですが  
カスタムバリデーションを使えば何とでもなると思います

```

    validate present_user
    
    def present_user
      errors.add(:user_id, :user_not_exists) if users.nil?
    end
    
```
CC BY-SA 4.0
2020-06-16T14:42:04.143
67732
2020-06-16T14:42:04.143
67725
answer