Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何在RubyonRails中从换行符中删除神秘的空格?_Ruby On Rails_Ruby_Ruby On Rails 3_Ruby On Rails 3.2 - Fatal编程技术网

Ruby on rails 如何在RubyonRails中从换行符中删除神秘的空格?

Ruby on rails 如何在RubyonRails中从换行符中删除神秘的空格?,ruby-on-rails,ruby,ruby-on-rails-3,ruby-on-rails-3.2,Ruby On Rails,Ruby,Ruby On Rails 3,Ruby On Rails 3.2,在Rails应用程序中,我有一个字段address,它是SQLite数据库中的varchar(255) 然而,每当我通过textareaform字段保存一个由多行组成的地址时,一个神秘的空白字符就会添加到右边 只有当地址右对齐时(例如,在信头上),这才可见 有谁能告诉我为什么会发生这种情况,以及如何预防这种情况 我对模型中的这些地址没有做任何特殊的处理 我已经将此属性编写器添加到我的模型中,但很遗憾,它不会删除空白: def address=(a) write_attribute(:addr

在Rails应用程序中,我有一个字段
address
,它是SQLite数据库中的
varchar(255)

然而,每当我通过
textarea
form字段保存一个由多行组成的地址时,一个神秘的空白字符就会添加到右边

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

有谁能告诉我为什么会发生这种情况,以及如何预防这种情况

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

我已经将此属性编写器添加到我的模型中,但很遗憾,它不会删除空白:

def address=(a)
  write_attribute(:address, a.strip)
end
这是一个屏幕截图:

正如您所看到的,只有最后一行是右对齐的。所有其他字符的末尾都包含一个空格字符


编辑:

这将是my(Safari)控制台的HTML输出:


“约翰·多伊”
“123大街”
“蛋火腿”
“英国”


我甚至不知道为什么每行都要加引号。。。也许这就是解决方案的一部分?

我相信
textarea
正在为行分隔符返回CR/LF,并且您会看到每行之间显示其中一个字符。有关这方面的一些讨论,请参阅。可能还有更好的问题。

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

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

可以去掉每行开头和结尾的空白。以下是两种简单的方法:

# 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

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


在<代码>地带获得战利品方法

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

您能给我们看一个空白的例子吗?我在上面添加了一个屏幕截图。等等,textarea表示您有多行正确吗?这意味着显示需要通过换行符拆分的每一行。然后把每一行都去掉。这个空格不是常用的分词法吗?或者这些文字是由航空母舰返回的吗?@MarcoPoli:不,我没有在任何一行后面打空格键。我只按了回车键。
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-10-85-110-105-116-101-100-32-75-105-110-103-100-111-109
@Tintin81,pdf文档显示在什么操作系统上?Mac OS 10.8.4。浏览器是Safari 6.0.5。这不是PDF格式。只是普通的HTML。好的,每行末尾都有Windows新行,而不是Mac/Unix新行,这可能会弄乱输出。但是,在每一行上调用strip()将同时删除
\r
\n
,因此我认为yfeldblum的解决方案应该有效。顺便说一下,该数字链中的13-10序列是
\r\n
的ascii码。在第一个序列之前是代表字母“e”的ascii码101,因此在第一行末尾的字符是“e\r\n”。在第二个13-10序列之前是ascii码116,它是一个“t”,因此第二行以字符结尾:“t\r\n”。在第三个13-10序列之前是ascii码109,它是一个“m”,因此第三行以字符结尾:“m\r\n”。最后,最后一行以ascii码109结尾,它是一个“m”。所以你可以看到没有空间。看起来很整洁,谢谢。我尝试了这两种技术,但它们不会以任何方式改变输出。这很奇怪,不是吗?我在上面补充了一些信息。也许你可以看看。谢谢。现在很难过,但是
squish
也不起作用。几个小时前就试过了。谢谢你!是什么让你认为op想要删除一行中间的多余空格和标签,并删除换行符?我能不能不把沙司和番茄酱一起上桌?。。我也看到了你的解决方案,它看起来非常漂亮,op也非常高兴。。
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>'
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 > 
>> @title = "abc"
=> "abc"
>> @title.strip!
=> nil
>> @title
=> "abc"
>> @title = " abc "
=> " abc "
>> @title.strip!
=> "abc"
>> @title
=> "abc"