在我的Rails应用程序中,我有一个字段address
,它在我的SQLite数据库中是varchar(255)
。
然而,每当我通过textarea
表单字段保存一个包含多行的地址时,就会在右侧添加一个神秘的空白字符。
只有在地址右对齐时(例如在信头上),这才会显示。
有人可以告诉我为什么会这样,以及如何预防?
我没有对我模型中的那些地址做任何特别的事情。
我已经将此属性编写器添加到我的模型中,但不幸的是它不会删除空格:
def address=(a)
write_attribute(:address, a.strip)
end
这是截图:
正如您所看到的,只有最后一行是右对齐的。所有其他的最后都包含一个空白字符。
修改
这将是我(Safari)控制台的HTML输出:
<p>
"John Doe "<br>
"123 Main Street "<br>
"Eggham "<br>
"United Kingdom"<br>
</p>
我甚至不知道为什么它会在每一行附近加上引号......也许这是解决方案的一部分?
答案 0 :(得分:0)
我相信textarea
正在返回行分隔符的CR / LF,并且您会看到每行之间显示其中一个字符。有关此问题的一些讨论,请参阅PHP displays \r\n characters when echoed in Textarea。那里也可能有更好的问题。
答案 1 :(得分: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
答案 2 :(得分:-1)
think@think:~/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(ruby)没有压扁
但是导轨已经挤压并挤压!(你应该知道爆炸(!)造成的差异)
think@think:~/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 >
答案 3 :(得分:-1)
查看strip!
方法
>> @title = "abc"
=> "abc"
>> @title.strip!
=> nil
>> @title
=> "abc"
>> @title = " abc "
=> " abc "
>> @title.strip!
=> "abc"
>> @title
=> "abc"
答案 4 :(得分:-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