2

サイトのページにブログ投稿を作成するために使用する投稿モデルがあります。投稿のコンテンツを HTML 形式にしたいのですが、実際に HTML で表示するのに苦労しています。ブログページではプレーンテキストとしてのみ表示されます。それが違いを生む場合、私はRails_Adminを使用しています。


posts見る:

#blog_page
- @posts_list.each do |post|
    %ul.post
        %li= post.created_at.strftime("%B %d, %Y")
        %li.title= post.title
        %li.author
            = 'By: '
            = post.author
        %li.content= RedCloth.new(post.content).to_html

= paginate @posts_list



postモデル:

class Post < ActiveRecord::Base
attr_accessible :content, :title, :author
has_many :comments

validates :title, :presence => true
validates :content, :presence => true

end



postsコントローラ:

class PostsController < ApplicationController

before_filter :authenticate_user!, :only => [:new, :create]

# GET /posts
def index
    @posts_list = Post.order("created_at DESC").page(params[:page]).per(5)
    render 'blog'
end

# GET /posts/
def show
    @post = Post.find(params[:id])
    render 'show'
end

def new
    if !current_user.admin?
        redirect_to '/blog'
    end
    @post = Post.new
end

# POST /posts
def create
    @post = Post.new(params[:post])
        if current_user.admin?
          respond_to do |format|
            if @post.save
              format.html  { redirect_to('/posts', :notice => 'Post was successfully created.') }
              format.json  { render :json => @post, :status => :created, :location => @post }
        else
          flash[:notice] = 'Error creating post!<br/>'.html_safe
            @post.errors.full_messages.each do |msg|
              flash[:notice] << "<br/>".html_safe
              flash[:notice] << msg
            end
          format.html  { render :action => "new" }
          format.json  { render :json => @post.errors, :status => :unprocessable_entity }
        end
      end
    else
      redirect_to '/blog'
    end
end

end
4

2 に答える 2

2

あなたの見解はこのようでなければなりません:

#blog_page
- @posts_list.each do |post|
    %ul.post
        %li= post.created_at.strftime("%B %d, %Y")
        %li.title= post.title
        %li.author
            = 'By: '
            = post.author
        %li.content= RedCloth.new(post.content).to_html.html_safe

= paginate @posts_list

そのためのヘルパーを作成することもできます。

def post_content( post ) 
  RedCloth.new(post.content).to_html.html_safe
end

そして、あなたの見解でそれを使用してください。

于 2012-08-15T16:00:19.163 に答える
1

ビュー/投稿の下に「_post.html.haml」という部分を作成します

投稿ビューで、次を使用します。

=render @posts_list

あなたの '_post.html.haml' パーシャルで:

%ul.post
    %li= post.created_at.strftime("%B %d, %Y")
    %li.title= post.title
    %li.author By: #{post.author}
    %li.content
      != RedCloth.new(post.content).to_html
于 2012-08-15T22:17:47.563 に答える