我对 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 自我项目是正确的,它可以被标记为正确完成
我的问题是红宝石会等待 FIllMethods 完成以重新加载自我,还是会在 FillMethods 完成之前重新加载自我?
如果我不执行 self.reload 为什么 self 项目不正确?FillMethods 是我的 lib 目录中的一个模块。
谢谢你的帮助,
那是我的填充方法:
模块填充方法
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
谢谢,