2015-02-08 18 views
7

Aby ćwiczyć Ruby on Rails, tworzę blog, który zawiera pole tekstowe (po samouczku Mackenzie Child). Po przesłaniu tekstu wszystkie nowe znaki zostaną usunięte. Wiem, że już wcześniej zadawano pytania dotyczące odmian tego pytania, ale nie udało mi się zreplikować żadnego z nich pomimo prób spędzonych przez cały dzień. Nie jestem bardzo zaznajomiony z JQuery.Zachowaj nowy wiersz w obszarze tekstowym za pomocą Ruby on Rails

Czy istnieje zestaw kroków, które zachowają nowe znaki?

_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 

Odpowiedz

29

Znaki nowej linii są rzeczywiście zachowane (jako \r\n), po prostu nie widać ich w swoich poglądów index/show.

W tych poglądów, zadzwoń simple_format na polu post.body zastąpić \n S z <br> s (HTML znaki nowej linii):

simple_format(post.body) 

Od docs:

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

Dziękuję bardzo! Cały dzień próbowałem to rozgryźć. Nie mogę uwierzyć, że rozwiązanie było takie proste. – jro

+0

Za każdym razem, gdy wciskam Enter, pozostawia on linebreak. W każdym razie, aby tego uniknąć? – jro

+0

@JonRoby sorry, nie jestem pewien co masz na myśli. Jeśli masz nowe pytanie, zadaj je, klikając przycisk "Zadaj pytanie" (http://stackoverflow.com/questions/ask) i opisz swój problem, pokazując powiązany kod. Dodaj link do tego pytania, jeśli pomoże to w zapewnieniu kontekstu. –