アクティブなレコード内の関連テーブルにのみ検証を追加する方法
概要
Railsにアドレステーブルがあります。
class Address < ApplicationRecord
validates :street, :city
presence: { allow_blank: false }
end
テーブルは複数のテーブルに関連付けられており、番地と都市が null または “” にならないように検証を追加しましたが、この検証は関連付けられたテーブル ユーザーに対してのみ実行したいと考えていました。
class User < ApplicationRecord
belongs_to :address
validates_associated :address
end
ユーザーはアドレスにbelongs_toを持っていますが、アドレス内にbelongs_toを入れたくありません。テーブルがユーザーの場合にのみアドレス検証を機能させるにはどうすればよいですか?
解決策
住所に関連付けられているユーザーまたは少なくとも 1 人のユーザーがいるときに、通りと都市の存在のみを検証したい場合は、次のように検証定義に if 条件を追加します。
class Address < ApplicationRecord
has_many :users
validates :street, :city
presence: { allow_blank: false },
if: Proc.new { |a| a.users.present? }
end
class User < ApplicationRecord
belongs_to :address
validates_associated :address
end