在#show 上呈现结果而不将数据存储在 ActiveStorage 中
Render results on #show without storing data in ActiveStorage
我正在通过构建我的第一个应用程序来学习 RoR(耶!)。我想问一个问题,因为 rails 指南没有涵盖这个主题:
如何在不在模型中存储任何数据的情况下在 #show 上向用户呈现独特的结果?
我想走的步数:
- 创建一个带有 form_tag 的基本 index 视图,允许用户提交 link(字符串)并单击提交按钮
- 编写允许我解析的服务对象 link 并创建我希望用户看到的响应
- 我想在一个单独的控制器中编写一个#show 方法来显示所有数据。 (我还想使用服务对象在该方法中解析我的参数 [:link]。
- 我想最终在#show 视图中的 table 中显示此数据(可能我需要为每个用户创建一个唯一的#show/[:id]?
这是我的应用目前的样子(大致):
Static Controller(只是用表单渲染 index.html.erb)
class StaticController < ApplicationController
def index
end
end
静态索引视图(是的,在这里解析 imgur link)
<h1>Hello Rails!</h1>
<%= form_tag("/images", method: "post") do %>
<p>
<%= label_tag(:imgur_link) %><br>
<%= text_field_tag(:imgur) %>
</p>
<p>
<%= submit_tag("Get my cards") %>
</p>
<% end %>
图像控制器(所有魔法都应该在这里发生)
class ImagesController < ApplicationController
def show
@collection = params[:imgur_link]
@service1 = service1.new(*args).call
@service2 = service2.new(*args).call
...
end
end
图片显示视图
空的,因为我现在一直在使用图像控制器。
如有任何帮助,我们将不胜感激。
谢谢!
您没有理由为了展示而将某物放入储藏室。如果您在控制器中获得结果时到达某个点,您可以将它们传递给一些 @variable
查看
正如我所见,您已经为第 1 步设置了表格。如果您还 routes.rb
为 POST /images
调用 'images#show',那么您将有 params[:imgur_link]
在您的表演动作中可用。应该这样做:
# config/routes.rb
YourApplication.routes.draw do
# ...
post '/images' => 'images#show'
end
现在您必须以某种方式处理 link。由于我不知道你的结果应该是什么,我假设你有两个 classes,Service1
和 Service2
,它们都接受 URL 和 return 结果集合,并且两个集合都包含相同 class 的元素。然后您可以只为您的 show
视图保留独特的结果,如下所示:
# app/controllers/images_controller.rb
class ImagesController < ApplicationController
def show
link = params[:imgur_link]
results1 = Service1.new(link).results
results2 = Service2.new(link).results
@results = (results1 + results2).uniq
end
end
然后您可以在 show
视图中使用 @results
做一些事情。例如
# app/views/images/show.html.erb
<% @results.each do |result| %>
<%= result.inspect %>
<% end %>
我正在通过构建我的第一个应用程序来学习 RoR(耶!)。我想问一个问题,因为 rails 指南没有涵盖这个主题:
如何在不在模型中存储任何数据的情况下在 #show 上向用户呈现独特的结果?
我想走的步数:
- 创建一个带有 form_tag 的基本 index 视图,允许用户提交 link(字符串)并单击提交按钮
- 编写允许我解析的服务对象 link 并创建我希望用户看到的响应
- 我想在一个单独的控制器中编写一个#show 方法来显示所有数据。 (我还想使用服务对象在该方法中解析我的参数 [:link]。
- 我想最终在#show 视图中的 table 中显示此数据(可能我需要为每个用户创建一个唯一的#show/[:id]?
这是我的应用目前的样子(大致):
Static Controller(只是用表单渲染 index.html.erb)
class StaticController < ApplicationController
def index
end
end
静态索引视图(是的,在这里解析 imgur link)
<h1>Hello Rails!</h1>
<%= form_tag("/images", method: "post") do %>
<p>
<%= label_tag(:imgur_link) %><br>
<%= text_field_tag(:imgur) %>
</p>
<p>
<%= submit_tag("Get my cards") %>
</p>
<% end %>
图像控制器(所有魔法都应该在这里发生)
class ImagesController < ApplicationController
def show
@collection = params[:imgur_link]
@service1 = service1.new(*args).call
@service2 = service2.new(*args).call
...
end
end
图片显示视图
空的,因为我现在一直在使用图像控制器。
如有任何帮助,我们将不胜感激。 谢谢!
您没有理由为了展示而将某物放入储藏室。如果您在控制器中获得结果时到达某个点,您可以将它们传递给一些 @variable
正如我所见,您已经为第 1 步设置了表格。如果您还 routes.rb
为 POST /images
调用 'images#show',那么您将有 params[:imgur_link]
在您的表演动作中可用。应该这样做:
# config/routes.rb
YourApplication.routes.draw do
# ...
post '/images' => 'images#show'
end
现在您必须以某种方式处理 link。由于我不知道你的结果应该是什么,我假设你有两个 classes,Service1
和 Service2
,它们都接受 URL 和 return 结果集合,并且两个集合都包含相同 class 的元素。然后您可以只为您的 show
视图保留独特的结果,如下所示:
# app/controllers/images_controller.rb
class ImagesController < ApplicationController
def show
link = params[:imgur_link]
results1 = Service1.new(link).results
results2 = Service2.new(link).results
@results = (results1 + results2).uniq
end
end
然后您可以在 show
视图中使用 @results
做一些事情。例如
# app/views/images/show.html.erb
<% @results.each do |result| %>
<%= result.inspect %>
<% end %>