私はRailsを使った一種のプロジェクト管理アプリに取り組んでいます(私のRailsスキルはちょっと錆びています)。私には2つのモデルオブジェクトがあります。この場合はUserとAccountで、多対多の関係があります(CompanyはAccountのより良い名前かもしれません)。ユーザーがサインアップすると、ネストされたフォームのヘルプを使用して(.buildを使用して)新しいアカウントが作成されます。アカウントモデルには、nameとaccount_adminの2つのフィールドがあります。最初のユーザーがアカウントを作成するときに、account_adminをユーザーIDに設定します。しかし、これを機能させることはできません。
モデルは次のように設定されています。
class Account < ActiveRecord::Base
attr_accessible :name, :account_admin
validates_presence_of :name
has_many :projects, dependent: :destroy
has_many :collaborators
has_many :users, through: :collaborators
end
class User < ActiveRecord::Base
has_secure_password
attr_accessible :email, :name, :password, :password_confirmation, :accounts_attributes
has_many :collaborators
has_many :accounts, through: :collaborators
accepts_nested_attributes_for :accounts
[...]
UserControllerは次のようになります。
def new
if signed_in?
redirect_to root_path
else
@user = User.new
# Here I'm currently trying to set the account_admin value, but it seems to be nil.
account = @user.accounts.build(:account_admin => @user.id)
end
end
作成アクションにも移動しようとしましaccount = @user.accounts.build(:account_admin => @user.id)
たが、フィールドがフォームから消えます。
私が望むことを達成するための適切な方法は何ですか(作成時にaccount_adminをユーザーIDに設定します)?または、どのユーザーがアカウントを作成したかを見つけるためのより良いアプローチがありますか(つまり、リレーションシップテーブルで何かをします)?
アップデート
@joelparkerhendersonの助けを借りて、私はそれを機能させたと思います。ユーザーモデルで次のようなメソッドを作成しました。
def set_account_admin
account = self.accounts.last
if account.account_admin == nil
account.account_admin = self.id
account.save
end
end
私はこれを呼び出しますafter_create :set_account_admin
。これは機能しますが、同じことを行うためのより多くの「レールの方法」はありますか?
ありがとう。