使用Rails 3保存前用空格替换空格

时间:2010-12-17 09:27:03

标签: ruby-on-rails-3

我正在尝试将名称保存到数据库中并且单个单词(firstname)正常工作但是当用户同时输入firstname和lastname时,我希望Rails将其作为firstname-lastname而不是firstname lastname(space)保存到数据库中之间)。

我知道我或许应该使用之前的创建过滤器,但我不确定这需要怎么样。我希望验证工作,即没有两个人应该能够使用相同的名称。

我正在使用Rails 3。

4 个答案:

答案 0 :(得分:42)

您可以在字符串上使用ActiveSupport的变形方法parameterize

name = 'john smith'     # => john smith
name.parameterize       # => john-smith

此外,参数化可以选择用于分词,因此您可以使用下划线替换短划线:

name.parameterize("_")  # => john_smith

使用参数化的一个优点是它将字符规范化为拉丁语,所以......

name = "jöhanne såltveç"
name.parameterize       # => johanne-saltvec

答案 1 :(得分:3)

为什么不在db中只有first_name和last_name列,并创建自己的验证规则以确保组合是唯一的(http://guides.rubyonrails.org/active_record_validations_callbacks.html#creating-custom-验证的方法)。您还应该在数据库中的这两列上创建唯一索引。

答案 2 :(得分:1)

另一个选择是我们regexp并用。替换所有现有空格。你会提出以下几点:

self.firstname.gsub(/\s+/, '-')

在您的模型中。

注意:我不确定ruby是否接受\s作为“任何空白字符”而且我认为*应该确保如果有人输入带有两个相邻空格(或更多)的名称,它将不会将每个空格转换为单独的短划线,但只能转换为一个。

答案 3 :(得分:0)

其他答案正确

但是,如果要在参数化时保留大小写

name = "Donald Duck"
name.parameterize(preserve_case: true)   # => Donald-Duck