Ruby on rails 在#show上呈现结果,而不在ActiveStorage中存储数据
我通过构建我的第一个应用程序来学习RoR(耶!)。我想问一个问题,因为rails指南没有涵盖这个主题: 如何在不将任何数据存储在模型中的情况下在#show上向用户呈现独特的结果? 我想采取的步骤:Ruby on rails 在#show上呈现结果,而不在ActiveStorage中存储数据,ruby-on-rails,ruby,imgur,Ruby On Rails,Ruby,Imgur,我通过构建我的第一个应用程序来学习RoR(耶!)。我想问一个问题,因为rails指南没有涵盖这个主题: 如何在不将任何数据存储在模型中的情况下在#show上向用户呈现独特的结果? 我想采取的步骤: 创建一个带有form_标记的基本索引视图,允许用户提交链接(字符串),然后单击submit按钮 编写服务对象,使我能够解析该链接并创建希望用户看到的响应 我想在一个单独的控制器中编写一个#show方法,它允许我显示所有数据。(我还想使用服务对象解析该方法中的参数[:link] 我希望最终在#show
class StaticController
静态索引视图(是的,这里是解析imgur链接)
你好,Rails!
图像控制器(所有魔法都应该在这里发生)
class ImagesController
图像显示视图
空的,因为我现在被图像控制器卡住了
任何帮助都将不胜感激。
谢谢!您没有理由仅仅为了显示而将某些内容放入存储器。如果您的控制器中有结果,您可以将其传递到某个
@变量中查看
如我所见,您已经为步骤1设置了表单。如果您还有routes.rb
为POST/images
调用'images\35; show',那么您的show操作中将有params[:imgur\u link]
可用。这应该是:
# config/routes.rb
YourApplication.routes.draw do
# ...
post '/images' => 'images#show'
end
现在您必须以某种方式处理该链接。由于我不知道您的结果应该是什么,我将假设您有两个类,Service1
和Service2
,它们都接受URL并返回结果集合,并且两个集合都包含同一个类的元素。然后,您只能留下唯一的结果对于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
如果您将其称为imgur\u link
,而不是在text\u field\u tag
中,您也应该将其称为imgur\u link
Fair point.Fixing atm;)是的。正是这样。我成功地正确地传递了变量,并使视图本身工作。现在我正在修复我的服务对象,因为显然我没有正确地写入它们。不过我更接近了。谢谢你的指针!完成了。很抱歉延迟。
class ImagesController < ApplicationController
def show
@collection = params[:imgur_link]
@service1 = service1.new(*args).call
@service2 = service2.new(*args).call
...
end
end
# config/routes.rb
YourApplication.routes.draw do
# ...
post '/images' => 'images#show'
end
# 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
# app/views/images/show.html.erb
<% @results.each do |result| %>
<%= result.inspect %>
<% end %>