0

在我的 Rails 应用程序中,我的 SQLite 数据库中address有一个字段。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>

我什至不知道为什么要在每一行加上引号......也许这是解决方案的一部分?

4

5 回答 5

0

我相信textarea为行分隔符返回 CR/LF,并且您会看到每行之间显示这些字符之一。有关此问题的一些讨论,请参阅PHP 在 Textarea 中回显时显示 \r\n 字符。那里可能还有更好的问题。

于 2013-08-05T15:12:15.337 回答
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
于 2013-08-05T17:07:16.950 回答
-1

抢夺strip!方法

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

资源

于 2013-08-05T19:37:24.030 回答
-1

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

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) 中没有 squish

但是rails有挤压和挤压!(你应该知道 bang(!) 的不同之处)

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 > 
于 2013-08-05T18:58:51.937 回答
-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
于 2013-08-05T16:59:23.143 回答