在实例方法或控制器中保存模型?

时间:2014-03-01 03:06:08

标签: ruby-on-rails rails-activerecord crud

我想用模型做一些事情。我遵循胖模型,瘦的控制器方法。

我应该在模型功能或控制器中保存模型吗?为什么?

例如:

# 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

3 个答案:

答案 0 :(得分:2)

这取决于您是否希望在不保存的情况下灵活地做某事。如果你只是想要做一些事情并保存,你可能会用同样的方法做得很好。但是如果do_something做了一些有价值但没有保存的东西,并且你可能想要在没有保存的情况下做那件事,那么将这些操作分开是有意义的。

答案 1 :(得分:2)

您应该将模型保存在控制器中,否则最终会产生太多的soql查询。

答案 2 :(得分:0)

您通常会在控制器中看到package.save的原因是,如果package.save失败或成功,您可能会有不同的渲染/重定向选项。例如,如果保存失败,您可能希望将用户重定向到允许更正任何包验证错误。如果package.save成功,您可能希望将它们重定向到另一个路由/操作。