显示时从表中删除记录

时间:2014-02-04 19:00:24

标签: ruby-on-rails ruby regex ruby-on-rails-3 activerecord

Ruby on Rails 3 我有一个名为“area_served”的属性的模型。它由许多记录组成。 rails控制台的示例:

area_served: "---\n- ''\n- Ontario\n"

当它显示在我的视图中时,显示如下:

--- - '' - Ontario

我希望它只显示没有破折号和引号的地方的名称。

我正在考虑使用正则表达式,但我不确定如何实现正则表达式。

@dashey = /[^\w,'-]|_/

这是视图文件必须显示的内容:

<% #current_grandstreamer.resellers.each do |reseller| %>
<tr>
  <td><%= reseller.area_served%></td>
</tr>

谢谢

3 个答案:

答案 0 :(得分:2)

您可以使用gsub替换短划线和带空字符串的引号

<tr>
  <td><%= reseller.area_served.gsub(/['-]/, '')%></td>
</tr>

如果需要,还可以删除换行符

  area_served.gsub(/['-\n]/, '')

答案 1 :(得分:1)

这是一个YAML:

"---\n- ''\n- Ontario\n"

特别是,这是该阵列的YAML版本:

['', 'Ontario']

如果area_served确实应该是YAML'd数组,那么你可以:

areas_served = YAML.load(obj.area_served) # or stuff this in a model method

将数组返回,然后像任何其他数组一样呈现。

但是,我怀疑area_served根本不应该是一个YAML'd数组,我怀疑它应该是一个简单的字符串。如果是这样,那么你正在尝试将数组保存到文本列,而ActiveRecord则以其无限的智慧将数组转换为YAML,因为这就是AR对它不理解的东西的作用;您将不得不弄清楚这些数组的来源并修复该代码,然后您将不得不浏览数据库并将已错误存储为YAML的area_served值取消YAML

答案 2 :(得分:1)

看起来像YAML,表示序列化字段。您可以在模型中使用serialize方法:

class Reseller < ActiveRecord::Base
  serialize :area_served
end

之后,area_served会自动反序列化:

reseller.area_served
#=> ["", "Ontario"]