Отображать результаты на #show без сохранения данных в ActiveStorage - PullRequest
0 голосов
/ 28 мая 2018

Я изучаю RoR, создав свое первое приложение (да!).Мне нужно подумать, поскольку направляющие рельсов не охватывают эту тему:

Как отобразить уникальные результаты на #show для пользователя без сохранения каких-либо данных в модели?

Шаги, которые я хочу предпринять:

  1. Создание базового индекса представления с тегом формы, который позволит пользователю отправить ссылку (строку) и нажать кнопку отправки
  2. Записать служебные объекты, которые позволят мне проанализировать эту ссылку и создать ответ, который я хочу, чтобы пользователь увидел
  3. Я хочу написать метод #show в отдельном контроллере, который позволит мне отображать все данные.(Я также хочу проанализировать мои параметры [: link] в этом методе, используя Service Objects.
  4. Я хочу, наконец, отобразить эти данные в таблице в представлении #show (возможно, мне нужно создать уникальный # show /[: id] для каждого пользователя?

Вот как выглядит мое приложение на данный момент (более или менее):

Статический контроллер (просто для рендеринга)index.html.erb с формой)

class StaticController < ApplicationController
  def index
  end
end

Представление статического индекса (да, здесь разбирается ссылка imgur)

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

Images Controller (где все волшебство ДОЛЖНО произойти)

class ImagesController < ApplicationController

  def show
    @collection = params[:imgur_link]
    @service1 = service1.new(*args).call
    @service2 = service2.new(*args).call
    ...
  end
end

Изображения Показать представление

Пусто, поскольку я застрял в контроллере изображений на данный момент.

Любая помощь будет более чем признательна. Спасибо!

1 Ответ

0 голосов
/ 28 мая 2018

Нет причин, по которым вы должны что-то помещать в хранилище только для того, чтобы отобразить это.Если вы дойдете до точки, когда у вас есть результаты в вашем контроллере, вы можете просто передать их для просмотра в виде @variable

Как я вижу, вы настроили форму для шага 1. Если вы такжеroutes.rb вызовите 'images # show' для POST /images, тогда у вас будет params[:imgur_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

Затем вы можете сделать что-то с @results в вашем show виде.Например,

# app/views/images/show.html.erb
<% @results.each do |result| %>
  <%= result.inspect %>
<% end %>
...