开发者

How to retrieve the account id just created with nested methods?

开发者 https://www.devze.com 2023-02-18 13:23 出处:网络
I am using Ruby on Rails 3 and I successfully use nested models in order to save model\\object associations.

I am using Ruby on Rails 3 and I successfully use nested models in order to save model\object associations.

In the user model file I have:

class User < ActiveRecord::Base
  has_one :account

  accepts_nested_attributes_for :account
  validates_associated :account
end

After @user.save I would like to retrieve the account id just created and save that value in the user database table. I need that because I will use the account_id as the foreign key for the user class, but I don't know if it is possible. If so, how can I do that?


In my user model I also tryed the following:

before_create :initialize_user

def initialize_user
  user_account = Account.create
  self.account_id = user_account.id
end

but it doesn't work.


UPDATE

I tryed this

class User < ActiveRecord::Base
  belongs_to :account,
    :class_name  => "Account",
    :foreign_key => "users_account_id"
end

class Account < ActiveRecord::Base
  has_one :user,
    :class_name  => "User",
    :foreign_key => "users_account开发者_如何学C_id"
end

and it save the new account. Anyway in the user database table the column users_account_id is null and so the foreign_key value isn't saved automatically.


The Approach is wrong. When you have a "has_one" relationship, they foreign key is in the associated model. So in your case it will in account. And if its accepting nested attributes for account. That should be taken care of by default if you are doing it write.

Take a look http://railscasts.com/episodes/196-nested-model-form-part-1 and the other part as well, to see how nested forms work


def initialize_user
  user_account = Account.create
  self.account_id = user_account.id
end

should be

def initialize_user
  self.account.create
end

When the new Account instance is being created, it will use the information about the current user automatically. Your method would have worked, but you'd have needed to add an extra "save" call.

0

精彩评论

暂无评论...
验证码 换一张
取 消