Как добавить ссылки на отдельные записи в методе to_csv в rails 5, чтобы в экспорте csv печатались абсолютные URL? - PullRequest
0 голосов
/ 20 сентября 2018

Я работаю над проектом в рельсах и недавно смотрел этот замечательный эпизод gorails.com об экспорте данных в формате CSV (https://gorails.com/episodes/export-to-csv). Я могу заставить его работать, но я действительно хочу получить абсолютный URLкаждая из «задач», поэтому при экспорте в CSV в каждой строке в 4-м столбце будет показана ссылка на «задачу», например: «localhost: 3000 / tasks / 1», «localhost: 3000 / tasks / 2» и т. д.Что-то вроде "task_url" в качестве заголовка столбца

Я не нашел в Интернете ни одного ресурса, который бы помог с этим. Есть мысли о том, как сделать это наиболее эффективным способом? Спасибо за помощь! Вотрабочий код:

def self.to_csv
    attributes = %w{id task_name task_description}
    CSV.generate(headers: true) do |csv|
    csv << attributes
        all.each do |task|
          csv << attributes.map{ |attr| task.send(attr) }
        end
    end
end

И я хотел бы сделать что-то вроде этого (акцент добавлен вокруг task_url):

def self.to_csv
    #need to declare what task_url is here
    attributes = %w{id task_name task_description **task_url**}
    CSV.generate(headers: true) do |csv|
    csv << attributes
        all.each do |task|
          csv << attributes.map{ |attr| task.send(attr) }
        end
    end
end

1 Ответ

0 голосов
/ 20 сентября 2018

Вы можете обновить модель Задачи с помощью метода экземпляра #task_url, чтобы сработал вызов send для экземпляров задачи.Затем следует реализовать метод #task_url с необходимой логикой для сборки и вернуть соответствующую ссылку для отдельного объекта задачи.Примерно так:

class Task
  include Rails.application.routes.url_helpers

  ...

  def self.to_csv
    attributes = %w{id task_name task_description task_link}
    CSV.generate(headers: true) do |csv|
      csv << attributes
      all.each do |task|
        csv << attributes.map{ |attr| task.send(attr) }
      end
    end
  end

  def task_link
    task_url(self)
  end
end

В этом примере ссылки создаются с помощью помощников маршрутов рельсов.И чтобы получить к ним доступ, нам нужно включить модуль #url_helpers, поскольку они не доступны (по умолчанию) на уровне модели .

Обратите внимание, что в примереметод называется #task_link;Предполагается, что вспомогательный метод маршрута уже называется #task_url, поэтому мы избегаем его переопределения.

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