Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在#show上呈现结果,而不在ActiveStorage中存储数据_Ruby On Rails_Ruby_Imgur - Fatal编程技术网

Ruby on rails 在#show上呈现结果,而不在ActiveStorage中存储数据

Ruby on rails 在#show上呈现结果,而不在ActiveStorage中存储数据,ruby-on-rails,ruby,imgur,Ruby On Rails,Ruby,Imgur,我通过构建我的第一个应用程序来学习RoR(耶!)。我想问一个问题,因为rails指南没有涵盖这个主题: 如何在不将任何数据存储在模型中的情况下在#show上向用户呈现独特的结果? 我想采取的步骤: 创建一个带有form_标记的基本索引视图,允许用户提交链接(字符串),然后单击submit按钮 编写服务对象,使我能够解析该链接并创建希望用户看到的响应 我想在一个单独的控制器中编写一个#show方法,它允许我显示所有数据。(我还想使用服务对象解析该方法中的参数[:link] 我希望最终在#show

我通过构建我的第一个应用程序来学习RoR(耶!)。我想问一个问题,因为rails指南没有涵盖这个主题:

如何在不将任何数据存储在模型中的情况下在#show上向用户呈现独特的结果?

我想采取的步骤:

  • 创建一个带有form_标记的基本索引视图,允许用户提交链接(字符串),然后单击submit按钮
  • 编写服务对象,使我能够解析该链接并创建希望用户看到的响应
  • 我想在一个单独的控制器中编写一个#show方法,它允许我显示所有数据。(我还想使用服务对象解析该方法中的参数[:link]
  • 我希望最终在#show view(可能我需要为每个用户创建一个唯一的#show/[:id])中的表中显示这些数据
  • 下面是我的应用程序目前的样子(或多或少):

    静态控制器(仅使用表单呈现index.html.erb)

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