Rails - 将代码从视图移动到控制器

时间:2013-06-14 10:37:32

标签: ruby-on-rails-3 refactoring

这是一种“最佳实践”问题,但即使它不是一个好的做法,我仍然想知道这种编码的含义 - 在可用性,可扩展性方面

根据http://rails-bestpractices.com/posts/24-move-code-into-controller

您不应该从视图中实例化变量,而是先在控制器中进行

所以代替<% @posts = Post.find(:all) %> 它应该是相应控制器中的@posts = Post.find(:all)

当我在我的代码上运行rails best practice gem时,我在一行看起来像是

 <% @msgs_by_sender.keys.each do |uid| %>
 <% @user = User.find(uid) %>

其中uid基本上是从控制器中先前计算的数组的数组中取出的user_id。然后,一旦我得到了uid,我就会得到@user,因此使用

更容易

我的问题是 - 因为我知道这段代码有效且没有任何东西爆炸,所以我不介意将它保留原样。但是,拥有这种线是否有任何长期优势

@users = User.find(@msgs_by_sender.keys)

1 个答案:

答案 0 :(得分:0)

您引用的原始帖子并未说“从不在视图中实例化变量”,但最佳做法是“不在视图中包含逻辑”。视图的目的是显示数据。逻辑应该在控制器或模型中,具体取决于它的逻辑类型。这是MVC理念的一部分,从长远来看,它有助于保持代码的可扩展性和可维护性。视图可能需要分配局部变量以帮助查看视图的详细信息,例如根据数据值选择要在显示元素上使用的类。视图中存在“视图逻辑”这样的东西。如果它有点复杂,那么惯例就是使用一个“helper”函数进入helpers文件夹。