Railsメソッドの実行順序について質問があります:ここで私は自分のモデルで何をしますか:
def update_fields
FillMethods.fill_info("BadgeUser", "Badge", self.id, self.badge_id, "badge_")
self.reload
self.update_attributes(:completed => true) if self.badge_goal == 0
end
オブジェクトがあり、そのオブジェクトに FillMethods 情報を適用して、このオブジェクトのいくつかのフィールドを埋めて保存します。次に、 Badge_goal == 0 であるかどうかを確認して、完了としてマークします。
私が抱えている問題は、self.reload を配置しないと、self 項目が更新されず、オブジェクトはデータベースに存在しますが、self 項目は FillMethods の前と同じになるということです。self.reload を実行すると、self アイテムは正しく、正しく完了したとマークできます
私の質問は、Ruby が FIllMethods が実行されて自己をリロードするのを待つか、FillMethods が完了する前に自己をリロードするかということです。
self.reload を実行しないと、self 項目が正しくないのはなぜですか? FillMethods は、私の lib ディレクトリにあるモジュールです。
ご協力いただきありがとうございます、
それは私の塗りつぶし方法です:
モジュール FillMethods
def self.fill_info(model1, model2, id1, id2, string)
parameters1 = model1.constantize.attr_accessible[:default].to_a.map {|s| s.dup}
parameters1.delete_if {|s| !s.start_with?(string)}
parameters2 = parameters1.map {|s| s = s.split(string)[1]}
h = Hash[parameters1.zip parameters2]
object1 = model1.constantize.find(id1)
object2 = model2.constantize.find(id2)
h.each do |parameter1, parameter2|
object1.update_attribute(parameter1.to_sym , object2.send(parameter2))
end
return object1
end
終わり
このメソッドの目的は、BadgeUser テーブルにすべてのバッジ情報を入力することです。Badge テーブル (名前など) の各列について、BadgeUser テーブル Badge_name にある
ありがとう、