Ruby中的字符串替换:greentexting支持图像板

时间:2011-12-29 16:45:12

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

我正在尝试为我的Rails图像板提供绿色文本支持(尽管应该提到这是严格的Ruby问题,而不是Rails问题)

基本上,我的代码所做的是:
1.逐行砍掉一个帖子 2.查看每一行的第一个字符。如果它是“>”,则启动greentexting
3.在行尾,关闭greentexting
把线条拼凑起来

我的代码如下所示:

def filter_comment(c) #use for both OP's and comments

c1 = c.content

str1 = '<p class = "unkfunc">' #open greentext
str2 = '</p>' #close greentext

if c1 != nil
arr_lines = c1.split('\n') #split the text into lines

arr_lines.each do |a|
  if a[0] == ">"
    a.insert(0, str1) #add the greentext tag
    a << str2 #close the greentext tag

  end
end

c1 = ""

arr_lines.each do |a|
  strtmp = '\n'
  if arr_lines.index(a) == (arr_lines.size - 1) #recombine the lines into text
    strtmp = ""
  end
  c1 += a + strtmp
end


c2 = c1.gsub("\n", '<br/>').html_safe

end

但由于某种原因,它不起作用!我有很奇怪的事情,greentexting只适用于第一行,如果你在第一行有greentext,普通文本在第二行不起作用!

3 个答案:

答案 0 :(得分:1)

旁注,可能是你的问题,没有太深入......

尝试使用join()

重新加入数组
c1 = arr_lines.join('\n')

答案 1 :(得分:0)

我怀疑你的问题是你的CSS(或者HTML),而不是Ruby。生成的HTML看起来是否正确?

答案 2 :(得分:0)

我认为问题在于拆分数组中的行。

   names = "Alice \n Bob \n Eve"
   names_a = names.split('\n')
   => ["Alice \n Bob \n Eve"]

请注意,遇到\ n时,字符串未被分割。

现在让我们试试这个

  names = "Alice \n Bob \n Eve"
  names_a = names.split(/\n/)
  => ["Alice ", " Bob ", " Eve"]
双引号中的

或“\ n”。 (感谢Eric的评论)

  names = "Alice \n Bob \n Eve"
  names_a = names.split("\n")
  => ["Alice ", " Bob ", " Eve"]

这在数组中分裂了。现在您可以检查并附加您想要的数据

可能这就是你想要的。

def filter_comment(c) #use for both OP's and comments

c1 = c.content

str1 = '<p class = "unkfunc">' #open greentext
str2 = '</p>' #close greentext

if c1 != nil
arr_lines = c1.split(/\n/) #split the text into lines

arr_lines.each do |a|
  if a[0] == ">"
    a.insert(0, str1) #add the greentext tag 
     # Use a.insert id you want the existing ">" appended to it <p class = "unkfunc">>
     # Or else just assign a[0] = str1 
    a << str2 #close the greentext tag

  end
end

c1 = arr_lines.join('<br/>')
c2 = c1.html_safe  

end

希望这会有所帮助.. !!