2014-12-05 34 views
0

我試圖從控制器向使用實例變量的視圖發送一個字符串變量。問題是,當呈現視圖時,發送的字符串變量被剝離了原始字符串中的所有空格。有沒有一些ruby字符串的特殊屬性或軌道如何處理他們,我錯過了?Ruby - 從控制器傳遞一個字符串以查看空格

紅寶石2.0.0p481(2014年5月8日修訂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> 

導軌終端

 
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方法,並分別使用它們而不影響你通過的變量t該方法?

+0

應該保留一個空格。多個,不,因爲這是HTML的工作原理,你需要使它們不是。破壞 – 2014-12-05 01:03:58

+2

不相關,但沒有理由使用String.new或temp變量。 – 2014-12-05 01:06:44

+0

嘗試把'@formstring。在控制器中凍結,看它是否被無意中修改了。 – 2014-12-05 02:36:58

回答

0

您的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時輸出任何東西(顯然)它在最後被初始化。

相關問題