0

Accountユーザー モデルのネストされた属性を受け入れるモデルがあります。アカウントhas_many users。したがって、ユーザーはアカウントなしでは存在できません。私はこの検証を書きました:

# users.rb
validates :account_id, presence: true, numericality: { only_integer: true }

サインアップ時に、ユーザーはアカウント フォームとネストされたユーザー フォームに入力します。ただし、アカウントがまだ存在しないため、私のテストは次のエラーで失敗しています。

#<ActiveModel::Errors: ... @base=#<Account id: nil, title: "ACME Corp", subdomain: "acme1", created_at: nil, updated_at: nil>, @messages={:"users.account_id"=>["can't be blank"]}>

のネストされたフォームを介してユーザーが作成されていない限り、ユーザーの有効なアカウント ID が存在することを常に確認したいと考えていますAccounts#new。つまり、Accountが同時に作成されている場合、この場合、ユーザーに提供するアカウント ID はまだ存在しません。

これを行う方法はありますか?

すべての新しいユーザーは current_account オブジェクト、a la を介して作成されるため、これは議論の余地があるかもしれませんcurrent_account.users.build。しかし、私は確信したい。

4

2 に答える 2

1

ユーザー モデル:

validates :account, :presence => true

アカウント モデル:

has_many :users, :inverse_of => :account

これは、親オブジェクトがまだ保存されていない場合でも、その存在を検証するだけです。

于 2012-10-06T18:44:49.873 に答える
0

私は考えます:

validates_presence_of :account_id, only => :create
validates_numericality_of_account_id:, :null => true # or :only => :create

2 つのケースを分離し、特別なヘルパーを使用すると、すぐに読みやすくなります。

于 2012-10-06T18:17:55.573 に答える