据我所知,有两种方法可以做到这一点:
我想知道在视图和控制器之间共享数据的推荐/最佳方式是什么以及为什么。
另外,为什么传递多个变量被认为是一种不好的做法。
我想尽可能地将视图与控制器分离。
答案 0 :(得分:0)
我知道这是一个过于宽泛的问题。而且,受到很多意见(这不是很好)。然而,从设计的角度来看,它并不是一个完全无趣的问题。
所以,最近在我的项目中,几乎所有的控制器都开始看起来像这样:
# app/controllers/foo_controller.rb
class FooController < ApplicationController
...
def create
@result = FooManager.create(params)
if @result[:success]
redirect_to successful_create_path
else
redirect_to unsuccessful_create_path
end
end
...
end
而且,我有经理和#39; (很多人称他们为服务对象&#39;或服务对象&#39;),如下所示:
# app/managers/foo_manager.rb
class FooManager
...
class << self
def create(params)
# do stuff
# always return a hash which optionally includes :success
# depending on whether create was successful or not
end
end
end
现在,我确保@result
包含视图需要正确呈现的所有内容。
为什么这么大惊小怪?当我这样做时:
我的观点对我的模型一无所知,所以我可以安全地对我的模型进行更改,而不必担心我的哪些观点会被破坏(只要我的@result
散列是良好的形成) - 所以,这里很好的脱钩;
我的控制器没有(或很少)关于我的模型,所以我可以安全地进行更改而不会扰乱我的控制器 - 所以,这里很好的解耦;
经常,我的模特彼此之间知之甚少,我的经理处理多模型交易,这让我的模特变得不那么胖和上帝 - 所以,这里很好的脱钩;
服务对象(普通的旧Ruby对象或&#39; PORO&#39;)非常容易测试。