我有一个Search
模型和控制器。业务逻辑是,如果用户的关键字与产品的型号完全匹配,则将其重定向到产品页面。
在这种情况下,我应该从模型内部(大多数逻辑已经驻留在那里)进行重定向吗?
或者我是否应该返回一个标志或其他东西到控制器,以便我可以处理重定向?
模型对象不能也永远不会做重定向。应用程序逻辑是控制器的职责,因此控制器应该询问模型对象(作为请求的结果)产品是否与型号匹配,然后控制器执行重定向。模型对象不应该知道任何关于控制器或视图的信息。这是由Rails实现的"模型-视图-控制器概念"的一部分。
Rails将模型实现为ActiveRecord模式,因此模型对象负责数据库是可以的,这包括对数据库的搜索。查看Rails指南中ActiveRecord查询的许多选项,以了解模型对象的责任。
永远记住MVC模式:Rails中的MVC
Model必须不关心重定向或其他与控制器相关的东西。