Есть ли способ отправить один и тот же набор идентификаторов для двух разных действий, таких как new и show? - PullRequest
0 голосов
/ 06 января 2020

Итак, у меня есть контроллер поиска, который ищет датчики. Если пользователь ищет указанные атрибуты c, он получает список датчиков, который соответствует искомым атрибутам, и количество искомых датчиков сохраняется в переменной с именем @ сенсоры.

Модель контроллера поиска

class Search < ApplicationRecord
    belongs_to :user, optional: true

    def sensors
        @sensors ||= find_sensors
    end

    def find_sensors
        sensors = Sensor.where(rcomplete: true, lcomplete: true).order(:name)
        # search sensor info
        sensors = sensors.where("lower(name) like lower(?)", "%#{keywords}%") if keywords.present?
        sensors = sensors.where("concentrations.value >= ?","#{conc_min}")
        sensors = sensors.where("concentrations.value <= ?","#{conc_max}")

        # search publication info
        sensors = sensors.joins(:publication).where("lower(publications.title) LIKE lower(?)","%#{publication}%") if publication.present?
        if year_min.present?
            sensors = sensors.joins(:publication).where("publications.year >= ?","#{year_min}")
        end
        if year_max.present?
            sensors = sensors.joins(:publication).where("publications.year <= ?","#{year_max}")
        end
        sensors = sensors.joins(:publication).where("lower(publications.author) LIKE lower(?)","%#{author}%") if author.present?
        sensors = sensors.joins(:publication).where("lower(publications.cauthor) LIKE lower(?)","%#{co_author}%") if co_author.present?
        sensors = sensors.joins(:publication).where("lower(publications.institution) LIKE lower(?)","%#{institution}%") if institution.present?
        sensors = sensors.joins(:publication).where("lower(publications.journal) LIKE lower(?)","%#{journal}%") if journal.present?
        sensors = sensors.joins(:publication).where("lower(publications.link) LIKE lower(?)","%#{doi_link}%") if doi_link.present?

        sensors.uniq
    end
end

Затем найденные @sensors переходят в действие show контроллера поиска.

Search Controller

 class SearchesController < ApplicationController
    skip_before_action  :authenticate_user!, :only => [:new,:create, :show]
        def show        
           @sensors = @search.sensors


        respond_to do |format|
            format.html
        end
    end

На странице просмотра Search Search результаты поиска отображаются в виде Таблица. Затем есть ссылка на диаграмму с именем analyze result, и при щелчке она переходит на новую страницу с sensor_ids.

    <%= link_to "Analyze Results", charts_path(sensors_ids: @sensors.map(&:id)) %>

На странице индекса диаграммы идентификаторы датчиков передаются следующим образом: который позволяет страницам просмотра использовать идентификаторы датчиков

Chart Controller

class ChartsController < ApplicationController
  before_action :set_chart, only: [:show, :edit, :update, :destroy]

  def index
    @charts = Chart.all
    @sensors = Sensor.where(id: params[:sensors_ids])
    @sensors.map(&:id)
  end

На странице индекса диаграммы приведенная выше версия является верной версией, но это не то, что мне нужно. В нижней части это не работает, и я знаю, что это не имеет смысла, но я хочу использовать эту идею.

<div class="col-md-12">
    <%= link_to 'Function Chart', new_function_chart_path(sensors_ids: @sensors.map(&:id)) %>
    <div class="col-md-2"></div>
</div>

Неверная версия.

<%= link_to 'Function Chart', new_function_chart_path(sensors_ids: @sensors.map(&:id)), function_chart_path(sensors_ids: @sensors.map(&:id)) %>

Я хотел бы использовать концентрацию датчика для построения графика, однако проблема в том, что мне нужны данные от датчиков для go на странице показа функции, а не функции new стр. Однако я не могу отправить идентификаторы для двух разных действий, поэтому есть ли способ сделать это?

1 Ответ

0 голосов
/ 06 января 2020

как насчет перенаправления действия? используя redirect_to , в представлении:

<%= link_to 'Function Chart', function_chart_path(sensors_ids: @sensors.map(&:id), is_redirect: true) %>

затем в контроллере:

def index
  @charts = Chart.all
  @sensors = Sensor.where(id: params[:sensors_ids])
  @sensors.map(&:id)
  return redirect_to action: :show, sensors_ids: params[:sensors_ids] if params[:is_redirect]
end

※ код не проверен

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...