我有以下代码:
<%= "#{@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"
}}?
答案 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) %>