Ruby - 将控制器中的字符串传递给带空格的视图

时间:2014-12-05 00:54:14

标签: html ruby-on-rails ruby string

我试图使用实例变量从控制器向视图发送字符串变量。问题是,当呈现视图时,发送的字符串变量将被剥离原始字符串中的所有空格。是否有一些ruby字符串的特殊属性或rails如何处理它们我缺少?

Ruby 2.0.0p481(2014-05-08修订版45883)[x86_64-linux]
Rails 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>

Rails终端

Started POST "/pages/stringsub" for 127.0.0.1 at 2014-12-04 19:34:26 -0500
Processing by PagesController#stringsub as HTML
Parameters: {"mystring"=>"this should have spaces"}
Displaying @formstring from controller: this should have spaces
Rendered pages/stringsub.html.erb within layouts/application (1.4ms)
Completed 200 OK in 6ms (Views: 4.7ms | ActiveRecord: 0.0ms)

呈现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方法并单独使用它们而不影响传递给方法的变量?

1 个答案:

答案 0 :(得分:0)

您的stringsub方法可以简化。我们假设您new(简化版)中有UsersController次操作:

def new
  set_str
end

private

def set_str
  @str = params['str']
  puts "@str: #{@str}"
end

您的视图应该可以使用实例变量@str。确保在应用程序的其他位置不修改实例变量给您带来麻烦。将保留单个空格,但如果要保留所有空格,可以使用.your-class { white-space: pre; }

为元素设置样式

另外(在您的原始方法中),我不知道puts行如何(显然)在最后初始化@forminput时输出任何内容。