2011-11-16 62 views
5

我有一个Search模型和控制器。业务逻辑是,如果用户的关键字完全匹配产品的型号,则将其重定向到产品页面。最佳实践 - 模型中的重定向? - Rails 3.1

在这种情况下,我应该从模型内部进行重定向吗(大部分逻辑已经驻留)?

或者我应该返回一个标志或东西给控制器,以便我可以处理重定向?

回答

9

模型对象不能回答不应该做重定向。应用程序逻辑是控制器的责任,所以控制器应该询问模型对象(作为请求的结果)产品是否与型号相匹配,然后控制器执行重定向。模型对象不应该知道任何关于控制器或视图的信息。这是由Rails实现的"Model-View-Controller concept"的一部分。

Rails将模型实现为ActiveRecord pattern,因此模型对象负责数据库并且包括对数据库的搜索是可以的。查看Rails Guides for ActiveRecord Queries中的许多选项,了解模型对象的责任。

+0

是否可以在模型中执行所有搜索db(跨多个模型)的run_search函数,还是最好让控制器也这样做? – Jacob

+0

我会扩大我的答案。 – mliebelt

4

永远记住MVC模式:MVC in Rails

型号不得利用重定向或相关的控制器一些其他的东西照顾。让重定向在控制器中。