2

我想在我的主頁上顯示來自我的數據庫的隨機分配的6個工具。我已經創建一個頁面控制器與家庭行動。清理查看ruby邏輯並將問題分離到模型/控制器中

這是我的頁面控制器:

class PagesController < ApplicationController 

    def home 
     @tools = Tool.all 
    end 

end 

然後在我的home.html.erb鑑於我使用。樣品的方法來抓住從我的數據庫隨機工具等(我重複使用工具1這6次, tool2,tool3等變量):

<% tool1 = @tools.sample %> 

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

我想知道是否有更好的方法來做到這一點。在我看來,我似乎有邏輯,而且必須有辦法將邏輯移到其他地方?我的模型,控制器等。如何去清理這些代碼,以便它是良好的rails代碼?或者,也許這是很好的rails代碼,因爲我是初學者,所以我不知道它。

回答

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 %> 
+0

根據應用程序的不同,將它放在「工具」模型的作用域中可能也是有益的。也許有隨機條目數量的爭論。 – Drenmi

1

另外以安東尼的答案。

要清除了一些軌魔術的看法,你還可以添加一個偏貴app/views/tools叫:你的觀點

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

,然後切換到

_tool.html.erb 

看上去就像

<%= render @tools %> 

如果@tools是col,Rails將知道該怎麼辦工具的選擇

相關問題