UPDATE麻煩的寫入動作
我有我叫set_gold_and_silver
微縮模型的操作。
我希望我的用戶模型在用戶銷燬時運行它,所以我的用戶模型中有before_destroy :set_gold_and_silver
。
用戶有很多Imagevotes。在銷燬之前,我需要刪除那些Imagevotes,然後在這些圖片投票所涉及的所有縮圖上運行set_gold_and_silver
。
這就是我到目前爲止,我目前正在undefined method 'miniatures'
。
我不清楚我是否緩存self.imagevotes或者他們是否剛刪除,然後我得到的錯誤,因爲他們不再存在?
def set_gold_and_silver
votes = self.imagevotes
self.imagevotes.destroy
votes.miniatures.uniq.each(&:set_gold_and_silver)
end
我的模型
用戶
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable, :confirmable
has_many :collections, dependent: :destroy
has_many :miniatures, through: :collections
has_many :imagevotes, foreign_key: "voted_id", dependent: :destroy
has_many :imagevotes, foreign_key: "voter_id", dependent: :destroy
before_destroy :set_gold_and_silver
def set_gold_and_silver
my_collections = self.collections.each
their_miniatures = collection.miniature.uniq
my_collections.their_miniatures.each(&:set_gold_and_silver)
end
end
微型
class Miniature < ActiveRecord::Base
has_many :collections, dependent: :destroy
has_many :users, :through => :collections
has_many :imagevotes, dependent: :destroy
def set_gold_and_silver
wipe = self.collections.all
wipe.each {|s| s.update_attributes :is_gold => false, :is_silver => false}
top_collections = self.collections.limit(4)
gold = top_collections.shift
gold.update_attribute :is_gold, true if gold
top_collections.each {|s| s.update_attribute :is_silver, true}
end
end
收藏
class Collection < ActiveRecord::Base
default_scope order('imagevotes_count DESC')
belongs_to :miniature
belongs_to :user
has_many :imagevotes, dependent: :destroy
end
Imagevote
class Imagevote < ActiveRecord::Base
belongs_to :collection, :counter_cache => true
belongs_to :voter, class_name: "User", :counter_cache => "voted_count"
belongs_to :voted, class_name: "User", :counter_cache => "vote_count"
belongs_to :miniature
after_create :set_gold_and_silver
after_update :set_gold_and_silver
def set_gold_and_silver
self.miniature.set_gold_and_silver
end
end
你需要用模型的僞代碼更新你的問題用戶,微型,集合包括有/屬性和過濾器之前/之後。你創建了一個單獨的問題是很好的,但即使在那裏也是如此,當然也是如此。 –
編輯的問題。 – Ossie