在Devise用户模型中创建FullName方法?

时间:2011-06-18 18:16:27

标签: ruby-on-rails ruby-on-rails-3 devise

现在我使用设计并有两个字段。 fname和lname。

我希望能够将full_name字段放到用户模型中。然后,用户模型将获取full_name字段,并通过使用空格分割来提取fname和lname。如果有多个空格都将转到fname,最后一个项将是最后一个名称,然后使用fname和lname的提取字段保存到用户模型。

这可能不会破坏设计吗?

由于

2 个答案:

答案 0 :(得分:4)

当前答案的问题在于它们不会处理三个(+)单词名称,例如Billy Bob Thornton。

'Billy Bob Thornton'.split(/(.+) (.+)$/)  => ["", "Billy Bob", "Thornton"] 
'Billy Bob Thornton'.split(' ', 2)        => ["Billy", "Bob Thornton"] 

原始发布请求除名字之外的所有名称以转到名字。所以我建议:

def full_name
  [first_name, last_name].join(' ')
end

def full_name=(name)
  elements = name.split(' ')
  self.last_name = elements.delete(elements.last)
  self.first_name = elements.join(" ")
end

答案 1 :(得分:3)

你不需要破解设计,只需在你的用户模型中(或者你用作devise_for

的任何模式)
class User
  def fullname
    self.fname << " " << self.lname
  end
  def fullname=(fname)
    names = fname.split(/(.+) (.+)$/)
    self.fname = names[0]  
    self.lname = names[1] 
  end
end

未经测试且脱离我的头顶,但它应该是一个开始......

我不建议存储全名,只是像帮手一样使用它,但这取决于你。