清理视图 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 就会知道该怎么做
我想在我的主页上显示来自我的数据库的 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
是工具集合