使用paperclip(嵌套模型?)将照片添加到博客评论中

时间:2011-01-21 04:51:09

标签: ruby-on-rails paperclip

我刚刚开始使用rails,我认为我的问题与嵌套模型有关,但我不确定我做错了什么。

基本上,我正在尝试使用用户创建的帖子创建博客。作为一个典型的博客工作,我想在每个帖子中添加添加评论的功能。现在图像进入两个级别:1)我希望用户能够创建帖子,在帖子上他们将上传图像。现在,一旦创建了该帖子,我希望评论者能够在相应的帖子页面上添加评论并上传不同的图像。

我创建了包含帖子和评论的博客模型,没问题。我还添加了paperclip并创建了向帖子和评论添加“上传图片”选项的功能。但我只能将帖子图像显示在节目页面上(这是所有当前帖子的提要)和各个帖子页面本身。我尝试将图像添加到注释中,由于某种原因,我得到的路径不正确,导致“Missing_small”或错误的路径消息。

发布模型

 class Post < ActiveRecord::Base

      validates :name,  :presence => true
      validates :title, :presence => true,
                        :length => { :minimum => 5 }

      has_many :comments, :dependent => :destroy
      accepts_nested_attributes_for :comments


     # Paperclip

      has_attached_file :photo, :styles => { :small => "150x150>", :large => "360x360" },
                        :url => "/system/:class/:attachment/:id/:style_:basename.:extension",
                        :path => ":rails_root/public/system/:class/:attachment/:id/:style_:basename.:extension"

      validates_attachment_presence :photo
      validates_attachment_size :photo, :less_than => 5.megabytes
      validates_attachment_content_type :photo, :content_type => ['image/jpeg', 'image/png']
    end

评论模型

class Comment < ActiveRecord::Base
  attr_accessor :photo_file_name, :photo_file_size, :photo_content_type

  belongs_to :post

  # Paperclip

    has_attached_file :photo, :styles => { :small => "150x150>", :large => "360x360" },
                      :url => "/system/:class/:attachment/:id/:style_:basename.:extension",
                      :path => ":rails_root/public/system/:class/:attachment/:id/:style_:basename.:extension",
                      :default_url => '/images/missing_:style.png'


    validates_attachment_presence :photo
    validates_attachment_size :photo, :less_than => 5.megabytes
    validates_attachment_content_type :photo, :content_type => ['image/jpeg', 'image/png']
end

帖子显示视图

<p id="notice"><%= notice %></p>

<p>
 <% if @post.photo? %>
   <%= image_tag @post.photo.url(:small) %>
 <% else %>
   No attachment available!
 <% end %>
</p>
<p>
  <b>Name:</b>
  <%= @post.name %>
</p>

<p>
  <b>Title:</b>
  <%= @post.title %>
</p>

<p>
  <b>Content:</b>
  <%= @post.content %>
</p>

<h2>Comments</h2>
 <%= render @post.comments %>

<h2>Add a comment:</h2>
<%= render "comments/form" %>

<br />

<%= link_to 'Edit', edit_post_path(@post) %> |
<%= link_to 'Back', posts_path %> |

评论视图

<p>
 <%= image_tag comment.photo.url(:small) %>
</p>
<p>
 <b>Commenter:</b>
 <%= comment.commenter %>
</p>

<p>
 <b>Comment:</b>
 <%= comment.body %>
</p>

<p>
 <%= link_to 'Destroy Comment', [comment.post, comment],
                  :confirm => "Are you sure?",
                 :method => :delete %>
</p>

如果您还需要其他任何帮助我,请告诉我。

提前致谢,我真的很感激。

1 个答案:

答案 0 :(得分:0)

  

我希望评论者能够   添加评论并上传不同的   相应帖子上的图片

我不清楚您是否希望能够为单个帖子或评论上传多个图像。

为了给你这个选项,我会创建一个Photo模型,这就是具有回形针关联的。

class Photo < ActiveRecord::Base
  belongs_to :post
  has_attached_file :data  
end

然后问题是这张照片如何属于评论和帖子?为此你可以使用多态关联。

这种tutorial类型可以满足您的需求(将产品替换为Post),但您必须使用多态关联对其进行扩展,以便它适用于评论和帖子。