保存使用Rails 3之前用破折号替换空间

问题描述:

我想保存一个名称到数据库和一个单词(名字)工作正常,但是当用户输入名字和姓氏我希望Rails将其保存到数据库为名字 - 姓氏而不是姓氏名字(之间的空格)。保存使用Rails 3之前用破折号替换空间

我知道我应该使用一个创建过滤器之前,但我不知道这需要如何。我想验证工作,即没有两个人应该能够使用相同的名称。

我用Rails 3

为什么你不只是在DB FIRST_NAME和LAST_NAME列,并创建自己的验证规则,以确保该组合是唯一的(HTTP://guides.rubyonrails .ORG/active_record_validations_callbacks.html#创建定制验证的方法)。您还应该在数据库中的这两列创建一个唯一的索引。

另一种选择是对我们regexp并用所有现有空格替换。你会沿着以下几条线:

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

在你的模型。

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

+0

这种方式隔开所有字母以短划线,不是每一个字...... – Ger 2012-05-25 12:42:51

+0

@Gearóid哦,你是对的!我的意思是输入'+'而不是'*'!对于那个很抱歉。 = P – omninonsense 2012-06-02 12:41:01

您可以在字符串上使用ActiveSupport的偏转器方法parameterize

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

此外,参数化需要一个选项来使用的话,休息,这样你就可以像这样下划线代替破折号:

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

使用参数化的一个优点是,它规范了文字拉丁,所以......

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