我想做的事情很简单。它看起来像是:
# == 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列。
答案 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