【问题标题】:formatting the seeds file格式化种子文件
【发布时间】:2014-05-19 20:01:39
【问题描述】:

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

我正在更改的表格中的一个字段是文本区域。

我想格式化我在种子文件中输入的信息,这样我就不必返回并在网站上手动更改它。

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

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

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

【问题讨论】:

  • 使用Store#find_or_create_by 代替!Store.exists?
  • 不,我想先擦除所有数据
  • 使用\n,但请确保在数据周围使用双引号,而不是单引号

标签: ruby-on-rails ruby seed


【解决方案1】:

\n 肯定会工作。我不确定你是如何使用\n 的,它对你没有用。 通过包含\n 来更改您的create 方法调用,如下所示:

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

【讨论】:

  • 已经完成了这件事,但仍然无法正常工作。只是在文本中插入\n
  • 你得到什么错误?我刚刚在我的应用程序上尝试过它并且它有效。如果您想在聊天中讨论这个问题,请加入我chat.stackoverflow.com/rooms/48530/ror
  • 谢谢,由于显示区域是 html_safe 初始种子数据可以直接插入为 html
【解决方案2】:

我会用 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 对它的支持特别好。谷歌一下!

【讨论】:

  • 所以我没有完全理解,在这个例子中你是在种子文件中创建一个方法,然后在opening_hours的每个实例中调用它:?
  • 不,我只是为变量 opening_hours 赋值 - 为简单起见。我会用你的情况更新答案。
  • Heredocs 是个人喜好问题,但就个人而言,我不喜欢其中带有空格的超大字符串。我也更喜欢在源文件中格式化格式化文本。
猜你喜欢
  • 1970-01-01
  • 2011-06-02
  • 2020-05-09
  • 2016-02-23
  • 1970-01-01
  • 1970-01-01
  • 2021-06-23
  • 2014-02-10
相关资源
最近更新 更多