0

現在、私のアプリケーションは、認証にDeviseを使用して設計されています。私はそれを持っているので、最初のユーザーがサインアップすると、Accountsテーブルにアカウントが作成され、account_idがUserテーブルに渡されます。また、新しいアカウントが作成されるたびに、そのユーザーが管理者としてタグ付けされるように設定しています。最後に、管理者が新しいユーザーを作成できる場所で機能させています。

私の問題は、新しいユーザーが作成されたときに、これらのユーザーに管理者と同じaccount_idを割り当てて、ユーザーを結び付ける必要があることです。フォームにaccount_idフィールドを追加し、管理者に手動で入力させると、これを行うことができます。私が欲しいのは、これがバックグラウンドで自動化されていることです。

私は多くの品種を試しましたが成功しませんでした。これは、user.rbに次のように入力した失敗した試みの1つです。

before_save :add_account_id_from_parent     

   def add_account_id_from_parent       
    return true unless self.users.present?       
    self.users.update_attribute(:account_id, 1)    
   end

自動化してそのフィールドに配置できるかどうかを確認するために、数字の「1」を使用しました。

手動で言ったように、すべてが機能しますが、管理者のaccount_idに基づいて、サインアップ時にacocunt_idが自動的に追加されるようにします。

4

1 に答える 1

0

なぜあなたが を呼んでいるのか、少し混乱していますself.users。私の理解が正しければ、新しいユーザーを作成した後に (テストとして)account_idに割り当てたいと考えています。1次のようにできます。

before_save :add_account_id_from_parent

def add_account_id_from_parent
  self.account_id = 1
end

これは保存前に割り当てられるため、実際にレコードを更新する必要はありません。保存すると新しい値がデータベースに書き込まれます。

繰り返しますが、何かが欠けている可能性があります。その場合は明確にしてください。

更新

それが存在することを検証している場合は、次のように、コールバックをではなく にaccount変更する必要があります。before_validationbefore_save

before_validation :add_account_id_from_parent
于 2012-09-20T04:02:36.000 に答える