【问题标题】:Ruby - Pass a string from controller to view with spacesRuby - 将字符串从控制器传递到带有空格的视图
【发布时间】: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


【解决方案1】:

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

def new
  set_str
end

private

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

实例变量@str 应该对您的视图可用。确保给您带来麻烦的实例变量没有在您的应用程序的其他地方被修改。单个空格将被保留,但如果您想保留所有空格,您可以使用 .your-class { white-space: pre; } 设置元素样式

顺便说一句(在您的原始方法中),我看不到puts 行在(显然)最后被初始化时如何为@forminput 输出任何内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-06
    • 2017-02-21
    • 2019-11-27
    • 1970-01-01
    • 2012-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多