Rails:保存单独的数据库模型时触摸用户列

时间:2014-10-04 00:36:09

标签: ruby-on-rails model

我想做的事情很简单。它看起来像是:

# == Schema Information
#
# Table name: tags
#
#  id                          :integer          not null, primary key
#  tagname                     :string(255)
#  user_id                     :integer
class Tag < ActiveRecord::Base
  belongs_to :user

  # WHEN TAG GETS SAVED, UPDATE CORRECT USER COLUMN
  on_save_do ->{ User.find(user_id).current_tag = User.find(user_id).current_tag || id }

end

# == Schema Information
#
# Table name: users
#
#  id                     :integer          not null, primary key
#  current_tag            :integer
class User < ActiveRecord::Base
  has_many :tags, autosave: true, dependent: :destroy
end

所以我需要的是确保第一次为用户保存标记时,它会使用tag_id将当前标记ID保存到用户current_tag列。

2 个答案:

答案 0 :(得分:1)

class Tag < ActiveRecord::Base
  belongs_to :user
  after_save :update_user_tag

  private

  def update_user_tag
    user.current_tag = id
    user.save if user.changed?
  end
end

答案 1 :(得分:0)

这是我最终使用的解决方案。

class Tag < ActiveRecord::Base
  belongs_to :user
  after_save proc { user = User.find(self.user_id); user.current_tag = user.current_tag || self.id; user.save }
end