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

Ruby on rails 清理视图ruby逻辑并将关注点分离到模型/控制器中,ruby-on-rails,ruby,ruby-on-rails-4,activerecord,model-view-controller,Ruby On Rails,Ruby,Ruby On Rails 4,Activerecord,Model View Controller,我想在我的主页上显示我数据库中6个工具的随机组合。我已经创建了一个带有主操作的页面控制器 这是我的页面控制器: class PagesController < ApplicationController def home @tools = Tool.all end end class PagesController

我想在我的主页上显示我数据库中6个工具的随机组合。我已经创建了一个带有主操作的页面控制器

这是我的页面控制器:

class PagesController < ApplicationController

    def home
        @tools = Tool.all
    end

end
class PagesController
然后,在my home.html.erb视图中,我使用.sample方法从数据库中获取随机工具(我使用tool1、tool2、tool3等变量重复了6次):



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

您的控制器不需要从
工具\u表中提取所有内容
,因此我首先删除
。所有
。您的示例似乎只需要数据库中的6个随机对象,下面是一种方法:

class PagesController < ApplicationController

    def home
        @tools = Tool.order("RANDOM()").first(6)
    end

end
class PagesController
然后,在您的视图中,您可以循环浏览以下内容:

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

除了安东尼的答案

要使用一些rails魔术清除视图,您还可以在
应用程序/视图/工具中添加一个称为:

  _tool.html.erb
看起来像:

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

然后将您的视图更改为

<%= render @tools %>


如果
@tools
是依赖于应用程序的工具集合,Rails将知道该做什么,将其放在
工具
模型的范围内也可能是有益的。也许有一个关于随机条目的数量的参数。
<%= render @tools %>