【问题标题】:ActiveRecord hook to create row in database upon creationActiveRecord 钩子在创建时在数据库中创建行
【发布时间】:2012-01-30 10:49:01
【问题描述】:

在创建时在数据库中创建行的正确 rails 方法是什么?

例如,您有一个用户模型,您可以在其中创建一个新用户

User.rb model
user_id
user_id =1 

现在我正在寻找一种在数据库中为其他模型创建新对象/行的方法,例如

Account.rb model 
Should create a new row in account table with user_id = same as user_id above

目前我使用的是

  = f.fields_for :profile do |f| 
  = f.text_field  :some_value_for_profile

在我的用户创建视图中,以便在创建用户时将一些值写入数据库,但这不是“rails 方式”,而是希望使用 ActiveRecord 挂钩来执行此操作。

【问题讨论】:

  • 您在用户和个人资料之间有通常的关联吗?你在使用 accept_nested_attributes_for 吗?

标签: ruby-on-rails ruby-on-rails-3 activerecord model ruby-on-rails-3.1


【解决方案1】:

如果您从视图中收集帐户模型的数据,您应该使用用户记录创建帐户记录。

假设两者之间存在一对一的关系(用户 has_one 帐户)

#in controller
@user = User.new params[:users]
@account = @user.build_account params[:account]
@user.save

否则,如果您尝试为所有新用户创建默认帐户记录而不在用户注册时收集帐户数据,则可以使用 after_create 回调

#in user.rb
after_create :add_account

def add_account
  self.create_account
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-15
    • 1970-01-01
    • 2010-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-04
    相关资源
    最近更新 更多