我正在使用 Rails 开发一种项目管理应用程序(我的 Rails 技能有点生疏)。我有两个模型对象,在本例中为 User 和 Account,它们具有多对多关系(Company 可能是 Account 的更好名称)。当用户注册一个新帐户时(使用 .build)创建一个嵌套表单的帮助。Account 模型有两个字段 name 和 account_admin。当初始用户创建它的帐户时,我想将 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
[...]
用户控制器看起来像这样:
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
. 这行得通,但是有没有更多的“Rails 方式”来做同样的事情?
谢谢。