【发布时间】:2014-12-05 00:54:14
【问题描述】:
我正在尝试使用实例变量将字符串变量从控制器发送到视图。问题是,当呈现视图时,发送的字符串变量会被删除原始字符串中的所有空格。 ruby 字符串是否有一些特殊属性,或者 rails 如何处理我缺少的它们?
Ruby 2.0.0p481(2014-05-08 修订版 45883)[x86_64-linux]
导轨 4.0.5
控制器
def stringsub
forminput = params['mystring']
spaceinput = String.new(forminput)
puts "Displaying @formstring from controller: " + @formstring
@formstring = spaceinput
end
查看
<!--HTML page view -->
<p><%= @formstring %></p>
铁路总站
在 2014-12-04 19:34:26 -0500 开始为 127.0.0.1 发布 POST "/pages/stringsub" PagesController#stringsub 处理为 HTML 参数:{"mystring"=>"这应该有空格"} 从控制器显示@formstring:这应该有空格 在布局/应用程序中渲染页面/stringsub.html.erb (1.4ms) 在 6 毫秒内完成 200 次 OK(查看次数:4.7 毫秒 | ActiveRecord:0.0 毫秒)呈现的 HTML
<!--HTML page view -->
<p>thisshouldhavespaces</p>
(请注意,最终 HTML 中的空格已被删除)
有没有办法保留发送的原始字符串中的空格?
编辑:
问题是由该项目的组成员创建的方法,该方法将原始字符串作为参数传递给它,并使用 .gsub 从发送给它的参数中删除空格。
破坏它的方法
def groupmethod(start)
sub = start.split(" ")
count = (start.length - start.gsub!(/\s+/, "").length + 1) * 0.4
具有讽刺意味的是,我实际上能够通过使用 String.new 创建一个新变量并将其传递给方法来修复它
未损坏的实例变量
forminput = params['mystring']
@formstring = forminput
testvariable = String.new(forminput)
groupmethod(testvariable)
有没有更好或更正确的方法将变量传递给 ruby 方法并单独使用它们而不影响传递给方法的变量?
【问题讨论】:
-
应该保留一个空格。多个,不,因为这就是 HTML 的工作方式,你需要使它们不中断
-
不相关,但没有理由使用 String.new 或 temp 变量。
-
尝试将
@formstring.freeze放入控制器中,看看它是否在任何地方被无意修改。 -
String#gsub!就地修改字符串,而String#gsub复制原始字符串,然后修改副本。见ruby-doc.org/core-2.1.5/String.html#method-i-gsub-21 -
复制字符串。无论如何,问题不应该有答案;发布答案。
标签: html ruby-on-rails ruby string