保存使用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
作为“任何空格字符”我认为*应该确保如果某人输入带有两个相邻空格(或更多)的名称,它将不会转换每个空格成一个单独的破折号,但只有一个。
答
您可以在字符串上使用ActiveSupport的偏转器方法parameterize
。
name = 'john smith' # => john smith
name.parameterize # => john-smith
此外,参数化需要一个选项来使用的话,休息,这样你就可以像这样下划线代替破折号:
name.parameterize("_") # => john_smith
使用参数化的一个优点是,它规范了文字拉丁,所以......
name = "jöhanne såltveç"
name.parameterize # => johanne-saltvec
这种方式隔开所有字母以短划线,不是每一个字...... – Ger 2012-05-25 12:42:51
@Gearóid哦,你是对的!我的意思是输入'+'而不是'*'!对于那个很抱歉。 = P – omninonsense 2012-06-02 12:41:01