Ruby on rails 将Rails模型和控制器方法重构为模块
我有一个Rails应用程序,它开始在控制器中获得大量的逻辑:例如,当我创建Ruby on rails 将Rails模型和控制器方法重构为模块,ruby-on-rails,Ruby On Rails,我有一个Rails应用程序,它开始在控制器中获得大量的逻辑:例如,当我创建座位图时,我还需要创建一些座位和部分。因此,我将所有这些逻辑包装到一个SeatingChart.transaction块中,并在我的控制器中创建了一个方法,该方法可以解析从客户端接收到的参数,创建各种模型并确保它们相关联,然后在控制器的create方法中调用该方法 我应该将此方法移动到模块中,还是可以在控制器中?或者我应该把它移到座位图模型中吗 另一个问题是:我的一些模型有方法。它们通常是一些小方法,例如我的Ticket模
座位图时,我还需要创建一些座位
和部分
。因此,我将所有这些逻辑包装到一个SeatingChart.transaction
块中,并在我的控制器中创建了一个方法,该方法可以解析从客户端接收到的参数,创建各种模型并确保它们相关联,然后在控制器的create
方法中调用该方法
我应该将此方法移动到模块中,还是可以在控制器中?或者我应该把它移到座位图
模型中吗
另一个问题是:我的一些模型有方法。它们通常是一些小方法,例如我的Ticket
模型,我有一个方法update\u status
,它检查是否保留到时间过去,如果保留,则更改该Ticket
列的一些值。像这样的方法应该移到模块中,还是最好留到模型中去?如果可能的话,出于以下几个原因,通常最好将代码从控制器移到模型中:
1) 测试要容易得多,您可以使用单元测试而不是更容易设置和运行的集成测试
2) 更容易看到工作。从irb中,您可以启动模型并调用该方法来与之交互
3) 它将控制器逻辑解耦。当使设计更加restfull时(正如您应该做的那样),保持控制器亮起会有所帮助。控制器只是将模型与视图绑定在一起的工具
如果代码将在多个控制器中使用,那么您正确地假设应该将其包装在一个模块中(查找服务对象)。或者,如果控制器是相关的(也就是从彼此继承的),那么您可以只在一个基本控制器中弹出代码
希望这有帮助如果可能的话,通常最好将代码从控制器移动到模型,原因有两个:
1) 测试要容易得多,您可以使用单元测试而不是更容易设置和运行的集成测试
2) 更容易看到工作。从irb中,您可以启动模型并调用该方法来与之交互
3) 它将控制器逻辑解耦。当使设计更加restfull时(正如您应该做的那样),保持控制器亮起会有所帮助。控制器只是将模型与视图绑定在一起的工具
如果代码将在多个控制器中使用,那么您正确地假设应该将其包装在一个模块中(查找服务对象)。或者,如果控制器是相关的(也就是从彼此继承的),那么您可以只在一个基本控制器中弹出代码
希望这有助于考虑使用服务对象。并考虑ViTube宝石。 考虑使用服务对象。并考虑ViTube宝石。 我同意,出于ilan所述的原因,最好是使用瘦控制器
从您的情况可以看出,我认为您应该在模块中包含该代码,主要是因为它允许您分离关注点。模型应该处理特定的模型。如果您有跨多个模型的代码,那么将其放在一个模块中可以使各个模型保持干净 我同意,出于ilan所述的原因,最好是使用瘦控制器
从您的情况可以看出,我认为您应该在模块中包含该代码,主要是因为它允许您分离关注点。模型应该处理特定的模型。如果您有跨多个模型的代码,那么将其放在一个模块中可以使各个模型保持干净 我不确定您是否应该考虑使用适合您当前情况的模块。就我个人而言,我觉得它们更适合用于跨不同模型/控制器的可重用方法
另一方面,如果您有一个座位图
,其中有许多座位
和部分
,并且您必须通过参数进行解析,并手动创建各种模型和关联,那么这里有一些要检查的内容,以使您的生活更轻松
如果创建的所有内容都是通过params对象输入的,并且都是关联的,那么您应该能够使用SeatingChart.create(params[:seating\u chart])
创建所有内容
如果您没有从表单中获取创建关联所需的所有数据,请在保存之前在模型上使用以构建所需的关联
我不确定你是否应该考虑在你目前的情况下使用模块。就我个人而言,我觉得它们更适合用于跨不同模型/控制器的可重用方法
另一方面,如果您有一个座位图
,其中有许多座位
和部分
,并且您必须通过参数进行解析,并手动创建各种模型和关联,那么这里有一些要检查的内容,以使您的生活更轻松
如果创建的所有内容都是通过params对象输入的,并且都是关联的,那么您应该能够使用SeatingChart.create(params[:seating\u chart])
创建所有内容
如果您没有从表单中获取创建关联所需的所有数据,请在保存之前在模型上使用以构建所需的关联