如何查看字符串的最后一个字母?

时间:2013-10-23 22:02:06

标签: ruby-on-rails ruby

我有以下代码:

<%= "#{@resource.first_name.capitalize} " + "#{@resource.last_name.capitalize}" + "'s Area" %>

打印的内容如下:

  

Tom Byrne的区域,或Mark Kelly的区域

如果我可以避免这样的事情,那真的很酷:

  

Jean Collins的区域,或Paul Harris的区域

并使用正确的语法,如:

  

Jean Collins的区域,或Paul Harris的区域

任何人都知道如果"'s Area"的最后一个字母不是last_name,我会写一些会写"s"的代码,如果是"' Area"则写"s" }}?

5 个答案:

答案 0 :(得分:3)

获取字符串的最后一个字符:str[-1]

你可能会看看是否其他人这样做了,因为有几个特殊情况。快速谷歌搜索产生了possessive gem

答案 1 :(得分:3)

我会在模型中添加一个方法来处理逻辑:

class ResourceName
  def name_possessive
    last_letter = last_name[-1]
    possesive = last_letter == "s" ? "'" : "'s"

    "#{first_name} #{last_name}#{possessive}"
  end
end

然后在你看来:

<%= "#{@resource.name_possessive.capitalize}" %> Area

此代码可以变得更干净,但它可以正常工作。

答案 2 :(得分:2)

请注意,这是如何在"s"之后删除"s'"的答案,而不是如何在语法上删除所有格。语法上的做法取决于发音,而不是拼写(以及名词是复数还是单数),你可能需要一个更复杂的系统来理解英语语法并保存名称数据库(也许是一些片段) AI)为了做到这一点。

模式匹配比计算角色的位置更好。

last_name = "Kelly"
"#{last_name}'s".sub(/(?<=s')s\z/, "")
# => "Kelly's"

last_name = "Harris"
"#{last_name}'s".sub(/(?<=s')s\z/, "")
# => "Harris'"

答案 3 :(得分:1)

你有

<%= "#{@resource.first_name.capitalize} " + "#{@resource.last_name.capitalize}" + "'s Area" %>

您需要确定resource.last_name占有,

class ResourceName
    def poessessive(x)
        p += last_name[-1] == 's' ? "'" : "'s"
    end
end

然后你有,

<%= "#{@resource.first_name.capitalize} " + "#{@resource.last_name.capitalize}" + "#{@resource.last_name.possessive}" + " Area" %>

答案 4 :(得分:0)

感谢您的帮助,为所有人提供帮助,因为一切都很有用。最后我在users_helper.rb中使用了:

  def resource_full_name(name)
    new_name = name + "'"
    if name.end_with?('s')
      return new_name + " Area"
    else
      return new_name + "s Area"
    end
  end
end

然后在我看来:

<%= resource_full_name(@resource.name) %>