清理视图 ruby 逻辑并将关注点分离到 model/controller

Cleaning up view ruby logic and separating concerns into model/controller

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

这是我的页面控制器:

class PagesController < ApplicationController

    def home
        @tools = Tool.all
    end

end

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

<% tool1 = @tools.sample %>

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

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

您的控制器不需要从 tools_table 中提取所有内容,所以我会先删除 .all。您的示例使您看起来只需要数据库中的 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 就会知道该怎么做