2015-02-08 70 views
7

爲了練習Ruby on Rails,我創建了一個包含文本區域的博客(遵循Mackenzie Child's tutorial)。提交文本時,所有換行符都被刪除。我知道這個問題的變化已經被問到了,但是儘管整整一天都在嘗試,我仍然無法複製任何結果。我對JQuery不是很熟悉。使用Ruby on Rails在文本區域中保留換行符

是否有一組步驟可以保留換行符?

_form.html.erb

<div class="form"> 
    <%= form_for @post do |f| %> 
     <%= f.label :title %><br> 
     <%= f.text_field :title %><br> 
     <br> 
     <%= f.label :body %><br> 
     <%= f.text_area :body %><br> 
     <br> 
     <%= f.submit %> 
    <% end %> 
</div> 

posts_controller.rb

class PostsController < ApplicationController before_action :authenticate_user!, except: [:index, :show] 

def index 
    @posts = Post.all.order('created_at DESC') 
end 

def new 
    @post = Post.new 
end 

def create 
    @post = Post.new(post_params) 

    @post.save 
    redirect_to @post 
end 

def show 
    @post = Post.find(params[:id]) 
end 

def edit 
    @post = Post.find(params[:id]) 
end 

def update 
    @post = Post.find(params[:id]) 

    if @post.update(params[:post].permit(:title, :body)) 
     redirect_to @post 
    else 
     render 'edit' 
    end 
end 

def destroy 
    @post = Post.find(params[:id]) 
    @post.destroy 

    redirect_to posts_path 
end 

private 

    def post_params 
     params.require(:post).permit(:title, :body) 
    end 
end 

回答

29

換行符實際上被保存(如\r\n),只是你沒有看到他們在您的索引/節目的看法。

在這些意見,請致電simple_formatpost.body<br> S(HTML換行符),以取代\n S:

simple_format(post.body) 

從文檔:

simple_format(text, html_options = {}, options = {}) public 

Returns text transformed into HTML using simple formatting rules. 
Two or more consecutive newlines(\n\n) are considered as a paragraph and wrapped 
in <p> tags. One newline (\n) is considered as a linebreak and a <br /> tag is 
appended. This method does not remove the newlines from the text. 
+0

太謝謝你了!我花了整整一天的時間來解決這個問題。我無法相信這個解決方案很簡單。 – jro 2015-02-08 19:27:12

+0

每次我輸入時,都會留下換行符。無論如何要避免這一點? – jro 2015-02-09 01:52:17

+0

@JonRoby對不起,我不確定你的意思。如果您有新問題,請通過單擊[提問](http://stackoverflow.com/questions/ask)按鈕來提問,並描述顯示相關代碼的問題。如果有助於提供上下文,請包含此問題的鏈接。 – 2015-02-09 03:42:04