2013-08-05 56 views
0

在我的Rails应用程序中,我有一个字段address,它是我的SQLite数据库中的一个varchar(255)如何从Ruby on Rails中的换行符中删除神秘的空白?

但是,只要我通过textarea表单字段保存包含多行的地址,就会在右侧添加一个神秘的空白字符。

只有当地址右对齐时(例如在信笺上),这才变为可见。

有人可以告诉我为什么会发生这种情况,以及如何防止它?

我对模型中的这些地址没有做任何特别的处理。

我已经添加了此属性的作家我的模型,但它不会删除遗憾的空白:

def address=(a) 
    write_attribute(:address, a.strip) 
end 

这是截图:

screenshot

正如你只能看到最后一行是右对齐的。所有其他人在最后包含一个空白字符。


编辑:

这将是从我的(Safari浏览器)控制台输出的HTML:

<p> 
    "John Doe "<br> 
    "123 Main Street "<br> 
    "Eggham "<br> 
    "United Kingdom"<br> 
</p> 

我甚至不知道为什么它把周围的每一行的报价。 ..也许这是解决方案的一部分?

+0

能否请您告诉我们这种空白的例子吗? –

+0

我在上面添加了一个截图。 – Tintin81

+0

等待,textarea意味着你有多条线是正确的?这意味着显示你需要通过换行符“拆分”的每一行。然后去掉每一行。 – drhenner

回答

-2

什么是屏幕截图看,当你做这样的:

def address=(a) 
    write_attribute(:address, a.strip.unpack("C*").join('-')) 
end 

更新基于评论答案。另一种在每行末尾处去除\ r的方法:

def address=(a) 
    a = a.strip.split(/\r\n/).join("\n") 
    write_attribute(:address, a) 
end 
+0

'74-111-104-110-32-68-111-101-13-10-49-50-51-32-77-97-105-110-32-83-116-114-101-101- 116-13-10-69-103-103-104-97-109-13-10-85-110-105-116-101-100-32-75-105-110-103-100-111-109' – Tintin81

+0

@ Tintin81,正在显示的pdf文档的操作系统是什么? – 7stud

+0

Mac OS 10.8.4。浏览器是Safari 6.0.5。这不是PDF。只是普通的HTML。 – Tintin81

0

您可以去掉每行开始和结尾的空白。这里有两个简单的技巧来做到这一点:

# Using simple ruby 
def address=(a) 
    a = a.lines.map(&:strip).join("\n") 
    write_attribute(:address, a) 
end 

# Using a regular expression 
def address=(a) 
    a = a.gsub(/^[ \t]+|[ \t]+$/, "") 
    write_attribute(:address, a) 
end 
+0

看起来非常整齐,谢谢。我尝试了两种技术,但他们没有改变以任何方式输出。这很奇怪,不是吗? – Tintin81

+0

我在上面添加了更多信息。也许你可以看看。谢谢。 – Tintin81

-1

我解决了一个非常类似的问题时,我遇到了这样的事情, (我用

[email protected]:~/CrawlFish$ irb 
1.9.3-p385 :001 > "Im calling squish on a string, in irb".squish 
NoMethodError: undefined method `squish' for "Im calling squish on a string, in irb":String 
    from (irb):1 
    from /home/think/.rvm/rubies/ruby-1.9.3-p385/bin/irb:16:in `<main>' 

这证明, irb中没有压扁(红宝石)

但是钢轨挤压和挤压!(你应该知道爆炸(!)使)

[email protected]:~/CrawlFish$ rails console 
Loading development environment (Rails 3.2.12) 
1.9.3-p385 :001 > str = "Here i am\n \t \n \n, its a new world \t \t \n, its a \n \t new plan\n \r \r,do you like \r \t it?\r" 
=> "Here i am\n \t \n \n, its a new world \t \t \n, its a \n \t new plan\n \r \r,do you like \r \t it?\r" 
1.9.3-p385 :002 > out = str.squish 
=> "Here i am , its a new world , its a new plan ,do you like it?" 
1.9.3-p385 :003 > puts out 
Here i am , its a new world , its a new plan ,do you like it? 
=> nil 
1.9.3-p385 :004 > 
+0

现在变得很难过,但“挤压”也不起作用。试过几个小时前已经。虽然谢谢! – Tintin81

+0

是什么让你觉得自己希望从行中移除多余的空格和制表符并删除换行符? – 7stud

+0

我可以不用沙司酱吗?..我也看到了你的解决方案,它看起来非常漂亮,操作非常开心。 – beck03076

-1

乘坐战利品在strip!方法

>> @title = "abc" 
=> "abc" 
>> @title.strip! 
=> nil 
>> @title 
=> "abc" 
>> @title = " abc " 
=> " abc " 
>> @title.strip! 
=> "abc" 
>> @title 
=> "abc" 

source