0

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

根据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)
4

1 回答 1

0

您引用的原始帖子没有说“永远不要在视图中实例化变量”,但最佳实践说的是“不在视图中包含逻辑”。视图的目的是显示数据。逻辑应该在控制器或模型中,具体取决于它的逻辑类型。这是 MVC 理念的一部分,从长远来看,它有助于使您的代码更具可扩展性和可维护性。视图可能需要分配一个局部变量来帮助处理视图的详细信息,例如根据数据值选择要在显示元素上使用的类。有属于视图的“视图逻辑”之类的东西。如果有点复杂,约定是使用“帮助”功能,该功能将进入帮助文件夹。

于 2013-06-14T12:30:27.270 回答