Ruby on rails 根据字符串中的字数添加if语句

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

基于大量的帮助和复制粘贴,我成功地拼凑出了这句话。它基本上返回字符串中的前x个单词,我在我的应用程序中将其用作助手

有人能帮我理解我如何添加一个条件,如果实际字符串小于x个单词,请不要添加结束位,这是一个。。。。因此,在下面的等式中,我“喜欢”只有当“finish”部分超过传递到等式中的字数时,才添加“finish”部分

 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='&hellip;')
  # 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新手提供了一些代码注释。干杯