Ruby on rails 根据字符串中的字数添加if语句
基于大量的帮助和复制粘贴,我成功地拼凑出了这句话。它基本上返回字符串中的前x个单词,我在我的应用程序中将其用作助手 有人能帮我理解我如何添加一个条件,如果实际字符串小于x个单词,请不要添加结束位,这是一个。。。。因此,在下面的等式中,我“喜欢”只有当“finish”部分超过传递到等式中的字数时,才添加“finish”部分Ruby on rails 根据字符串中的字数添加if语句,ruby-on-rails,Ruby On Rails,基于大量的帮助和复制粘贴,我成功地拼凑出了这句话。它基本上返回字符串中的前x个单词,我在我的应用程序中将其用作助手 有人能帮我理解我如何添加一个条件,如果实际字符串小于x个单词,请不要添加结束位,这是一个。。。。因此,在下面的等式中,我“喜欢”只有当“finish”部分超过传递到等式中的字数时,才添加“finish”部分 def first_x_words(str,n=20,finish='…') str.split(' ')[0,n].inject{|sum,w
def first_x_words(str,n=20,finish='…')
str.split(' ')[0,n].inject{|sum,word| sum + ' ' + word} + finish
end
事实上,如果我能让它变得更复杂,在我找到少于x个单词的情况后,是否可以检查最后4个字符是否为,如果是,则将其删除
谢谢,
Adam这应该满足您的需求:
def first_x_words(str, n = 20, finish = '…')
# By default, Ruby will split on whitespace, so no
# argument needs to be passed.
words = str.split
# Rebuild 'n' words into a new string.
truncated = words[0..n-1].inject do |sum, word|
sum << ' ' << word
end
# Either append a finishing string or remove any
# trailing '</p>' tag.
if words.length > n
truncated << finish
else
truncated.chomp!("</p>")
end
# Return the completed string.
truncated
end
这很混乱,但如果你真的想这么做的话
def first_x_words(str,n=20,finish='…')
# make finish blank if the text is short enough
finish = '' if str.split(' ').count < n
str.split(' ')[0,n].inject{|sum,word| sum + ' ' + word} + finish
# remove trailing </p> if any
str.chomp('</p>')
end
我在您的原始代码前后添加了一行代码,希望您能更好地理解它。我很确定您可能会想改用INSTEAD,将底部稍微更改一下,以解释检查:if words.length>n truncated@Adam:感谢更新。我使用chomp添加了一个类似的实现,因为它对代码具有故障安全性,并为未来的Ruby新手提供了一些代码注释。干杯