1

我正在使用 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 方式”来做同样的事情?

谢谢。

4

1 回答 1

1

当您调用#new时,用户还没有 id(它是 nil)。

当你#save成为用户时,Rails 会自动给用户一个新的 id。

然后,您可以使用after_createActive Record 回调设置新帐户的account_admin

于 2012-04-07T11:57:18.793 回答