格式化种子文件

时间:2014-04-07 14:04:54

标签: ruby-on-rails ruby seed

我正在为已经存在的网站修改种子文件。

表I中的其中一个字段是文本区域。

我想格式化我在种子文件中输入的信息,因此我不必在网站上手动更改它。

目前,种子文件中的条目如下所示

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"但这打破了我的网站。我知道这只是一个小问题,但我想知道如何在运行种子时保留某种格式,在这种情况下,每次显示后都会显示一个新行。

非常感谢任何帮助,谢谢。

2 个答案:

答案 0 :(得分:3)

\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中添加到种子文件中以获得正确的格式。

答案 1 :(得分:0)

我会用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特别支持它。谷歌吧!