我想用模型做一些事情。我遵循胖模型,瘦的控制器方法。
我应该在模型功能或控制器中保存模型吗?为什么?
例如:
# in package_controller.rb
def do_stuff
package.do_something
package.do_another_thing
package.save
end
# in package.rb
def do_something
self.foo = "bar"
end
def do_another_thing
self.apple = "banana"
end
VS
# in package_controller.rb
def do_stuff
package.do_something
package.do_another_thing
end
# in package.rb
def do_something
self.foo = "bar"
self.save
end
def do_another_thing
self.apple = "banana"
self.save
end
答案 0 :(得分:2)
这取决于您是否希望在不保存的情况下灵活地做某事。如果你只是想要做一些事情并保存,你可能会用同样的方法做得很好。但是如果do_something
做了一些有价值但没有保存的东西,并且你可能想要在没有保存的情况下做那件事,那么将这些操作分开是有意义的。
答案 1 :(得分:2)
您应该将模型保存在控制器中,否则最终会产生太多的soql查询。
答案 2 :(得分:0)
您通常会在控制器中看到package.save的原因是,如果package.save失败或成功,您可能会有不同的渲染/重定向选项。例如,如果保存失败,您可能希望将用户重定向到允许更正任何包验证错误。如果package.save成功,您可能希望将它们重定向到另一个路由/操作。