这是一种“最佳实践”问题,但即使它不是一个好的做法,我仍然想知道这种编码的含义 - 在可用性,可扩展性方面
根据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)
答案 0 :(得分:0)
您引用的原始帖子并未说“从不在视图中实例化变量”,但最佳做法是“不在视图中包含逻辑”。视图的目的是显示数据。逻辑应该在控制器或模型中,具体取决于它的逻辑类型。这是MVC理念的一部分,从长远来看,它有助于保持代码的可扩展性和可维护性。视图可能需要分配局部变量以帮助查看视图的详细信息,例如根据数据值选择要在显示元素上使用的类。视图中存在“视图逻辑”这样的东西。如果它有点复杂,那么惯例就是使用一个“helper”函数进入helpers文件夹。