用户能够在Rails论坛中向评论中添加图像

时间:2016-05-24 09:43:28

标签: ruby-on-rails image comments attachment forum

所以我添加了用户在我的rails论坛中为帖子添加图片的功能。我现在希望用户能够将图像添加到帖子的评论中。 我开始使用迁移add_attachment_image_to_comments.rb

class AddAttachmentImageToComments < ActiveRecord::Migration
  def self.up
    change_table :comments do |t|
      t.attachment :image
    end
  end

  def self.down
    remove_attachment :comments, :image
  end
end

编辑了视图文件:

= simple_form_for([@post, @post.comments.build]) do |f|
  = f.input :comment
  = f.input :image
  %br
  = f.submit

这是posts_controller文件:

class PostsController < ApplicationController
before_action :find_post, only: [:show, :edit, :update, :destroy]
before_action :authenticate_user!, except: [:index, :show]

def index
    @posts = Post.all.order("created_at DESC").paginate(page: params[:page], per_page: 7)
end

def show
end

def new
    @post = current_user.posts.build
end

def create
    @post = current_user.posts.build(post_params)

    if @post.save
        redirect_to @post
    else
        render 'new'
    end
end

def edit
end

def update
    if @post.update(post_params)
        redirect_to @post
    else
        render 'edit'
    end
end


def destroy
    @post.destroy
    redirect_to root_path
end

private

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

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

这是comments_controller文件:

class CommentsController < ApplicationController
def create
    @post = Post.find(params[:post_id])
    @comment = @post.comments.create(params[:comment].permit(:comment,     :image))
    @comment.user_id = current_user.id if current_user
    @comment.save

    if @comment.save
        redirect_to post_path(@post)
    else
        render 'new'
    end
end

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

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

    if @comment.update(params[:comment].permit(:comment, :image))
        redirect_to post_path(@post)
    else
        render 'edit'
    end
end

def destroy
    @post = Post.find(params[:post_id])
    @comment = @post.comments.find(params[:id])
    @comment.destroy
    redirect_to post_path(@post)
end
end

这使用户能够添加附件。我现在的问题是让图像显示在帖子的评论部分。 这是我的节目文件:

#post_content

  %h1= @post.title
  %p= @post.content
  = image_tag @post.image.url(:medium)

  #comments
      %h2
          = @post.comments.count
          Comment(s)
      = render @post.comments
      = image_tag @comment.image.url(:medium)

我得到了错误 - 未定义的方法`image&#39;为零:NilClass。突出显示此行 - = image_tag @ comment.image.url(:medium)

任何帮助都非常感激。

1 个答案:

答案 0 :(得分:0)

  

未定义的方法`image&#39;为零:NilClass

此行@comment的问题是= image_tag @comment.image.url(:medium) nil ,因为您尚未在@comment中声明show posts_controller的{​​{1}}方法。

<强> 解决方案

由于 帖子 可以有多个 评论 ,并且由于@post可用,您可以进行迭代通过以下视图中的@post评论。

- @post.comments.each do |comment|
= image_tag comment.image.url(:medium)