2013-08-05 92 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