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

时间:2015-04-19 02:05:19

标签: ruby-on-rails ruby ruby-on-rails-4 activerecord model-view-controller

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

这是我的页面控制器:

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代码?或者这可能是好的导轨代码,因为我是初学者,所以我不知道。

2 个答案:

答案 0 :(得分:5)

您的控制器无需从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 %>

答案 1 :(得分:1)

除了安东尼的回答。

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

  _tool.html.erb

看起来像:

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

然后将您的观点更改为

<%= render @tools %>

如果@tools是工具集合

,Rails会知道该怎么做