форматирование файла сидов

Я изменяю начальный файл для уже существующего сайта.

Одно из полей в таблице, которую я изменяю, — это текстовая область.

Я хотел бы отформатировать информацию, которую я ввожу в начальный файл, чтобы мне не пришлось возвращаться и изменять ее вручную на сайте.

В настоящее время запись в начальном файле выглядит так

if !Store.exists?(:title => 'store Cavan')
Store.create(
    opening_hours: 'Mon. to Fri.     8:30 - 9:00PM
                    Saturday         8:30 - 7:00 PM
                    Sunday         11:00 - 7:00 PM',
    latitude: 53,
    longitude: -7,
    title: 'test store Cavan',
    street_line_one: 'test Retail Park',
    street_line_two: 'test Road',
    town: 'Cavan',
    county: 'Cavan',
    country: 'Ireland')

Когда я запускаю rake db:seed, это появляется в информационном окне, подобном этому

Mon. to Fri.     8:30 - 9:00PMSaturday         8:30 - 7:00 PMSunday         11:00 - 7:00 PM

Вместо этого

Mon. to Fri.     8:30 - 9:00PM
Saturday         8:30 - 7:00 PM
Sunday         11:00 - 7:00 PM

Я попытался добавить туда '\n' и "\n", но это сломало мой сайт. Я знаю, что это всего лишь небольшая проблема, но я хотел бы знать, как сохранить какое-то форматирование, когда я запускаю свои семена, в этом случае новая строка отображается после каждого раза.

любая помощь очень ценится, спасибо.


person Joe Lloyd    schedule 07.04.2014    source источник
comment
вместо этого используйте Store#find_or_create_by !Store.exists?   -  person Зелёный    schedule 07.04.2014
comment
нет, сначала я хочу стереть все данные   -  person Joe Lloyd    schedule 07.04.2014
comment
используйте \n, но убедитесь, что вы используете двойные кавычки, а не одинарные кавычки вокруг данных   -  person house9    schedule 07.04.2014


Ответы (2)


\n определенно сработает. Я не знаю, как вы использовали \n, и у вас это не сработало. Измените вызов метода create, включив \n, как показано ниже:

Store.create(
    opening_hours: 'Mon. to Fri.     8:30 - 9:00PM\nSaturday         8:30 - 7:00 PM\nSunday         11:00 - 7:00 PM',
    latitude: 53,
    longitude: -7,
    title: 'test store Cavan',
    street_line_one: 'test Retail Park',
    street_line_two: 'test Road',
    town: 'Cavan',
    county: 'Cavan',
    country: 'Ireland')

ОБНОВЛЕНИЕ

Согласно сеансу чата. OP решил полностью добавить код в формате html в начальный файл, чтобы получить правильный формат.

person Kirti Thorat    schedule 07.04.2014
comment
сделал именно это и все еще не работает. просто гной \n в тексте - person Joe Lloyd; 07.04.2014
comment
Какая у вас ошибка? Я только что попробовал это в своем приложении, и оно работает. Если вы хотите обсудить это в чате, присоединяйтесь ко мне chat.stackoverflow.com/rooms/48530/ror - person Kirti Thorat; 07.04.2014
comment
Спасибо, так как область отображения была html_safe, исходные данные можно было вставить непосредственно как html. - person Joe Lloyd; 07.04.2014

Я бы сделал это с помощью heredoc:

opening_hours = <<-END.gsub(/^\s*/, '')
  Mon. to Fri.     8:30 - 9:00 PM
  Saturday         8:30 - 7:00 PM
  Sunday          11:00 - 7:00 PM
END
=> "Mon. to Fri.     8:30 - 9:00 PM\nSaturday         8:30 - 7:00 PM\nSunday          11:00 - 7:00 PM\n"

Вы можете использовать любой метод, который вам нравится после открытия END, например. ruby-dedent, чтобы удалить отступ (если вам не нравятся регулярные выражения). Закрывающий END не обязательно должен быть в начале строки, - перед открывающим END означает, что все пробелы перед закрывающим END должны игнорироваться.

В твоем случае:

Store.create(
  latitude: 53,
  longitude: -7,
  title: 'test store Cavan',
  street_line_one: 'test Retail Park',
  street_line_two: 'test Road',
  town: 'Cavan',
  county: 'Cavan',
  country: 'Ireland',
  opening_hours: <<-END.strip_heredoc
    Mon. to Fri.     8:30 - 9:00 PM
    Saturday         8:30 - 7:00 PM
    Sunday          11:00 - 7:00 PM
  END
)

strip_heredoc поставляется с ActiveSupport и дает здесь тот же результат, что и gsub.

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

Heredocs — это просто очень хороший способ встраивания отформатированных данных в исходный код, и Ruby особенно хорошо его поддерживает. Погугли это!

person svoop    schedule 07.04.2014
comment
Так что я не совсем понимаю, в этом примере вы создаете метод в начальном файле, а затем вызываете его в каждом экземпляре opens_hours: ? - person Joe Lloyd; 07.04.2014
comment
Нет, я просто присваиваю значение переменной opens_hours — для простоты. Я обновлю ответ вашим случаем. - person svoop; 07.04.2014
comment
Heredocs - дело вкуса, но лично мне не нравятся строки большого размера с пробелами в них. Я предпочитаю, чтобы форматированный текст также форматировался в исходном файле. - person svoop; 07.04.2014