清理视图ruby逻辑并将关注点分离到模型/控制器中

我想在我的主页上显示我的数据库中随机分类的6个工具。 我创建了一个带有主页操作的Pages控制器。

这是我的Pages控制器:

class PagesController < ApplicationController def home @tools = Tool.all end end 

然后在我的home.html.erb视图中,我使用.sample方法从我的数据库中抓取随机工具(我使用tool1,tool2,tool3等为每个变量重复6次):

     

我想知道是否有更好的方法来做到这一点。 在我看来,我似乎有逻辑,必须有办法将逻辑转移到其他地方? 我的模型,控制器等等。如何清理这些代码,以便它是好的rails代码? 或许这是很好的rails代码,我只是不知道它,因为我是一个初学者。

您的控制器不需要从tools_table提取所有内容,因此我首先删除tools_table 。 您的示例使您看起来只需要数据库中的6个随机对象,这是一种方法:

 class PagesController < ApplicationController def home @tools = Tool.order("RANDOM()").first(6) end end 

然后在您的视图中,您可以循环遍历这些:

 <% @tools.each do |tool| %> <%= image_tag tool.tool_image.url(:medium) %> <%= tool.name %> <%= tool.description %> <% end %> 

除了安东尼的回答。

要使用某些rails魔法清除视图,您还可以为您的app/views/tools添加一个部分:

  _tool.html.erb 

看起来像:

  <%= image_tag tool.tool_image.url(:medium) %> <%= tool.name %> <%= tool.description %> 

然后将您的视图更改为

 <%= render @tools %> 

如果@tools是一个工具集合,Rails将知道该怎么做😄