Добавление фотографий в комментарии блога с помощью скрепки (модели для вложения?) - PullRequest
0 голосов
/ 21 января 2011

Я только начинаю в рельсах и думаю, что мой вопрос связан с вложенными моделями, но я не уверен, что делаю неправильно.

По сути, я пытаюсь создать блог с сообщениями, созданными пользователями.Как работает типичный блог, в каждом посте я хочу добавить функциональность добавления комментариев.Теперь изображения вступают в игру на двух уровнях: 1) Я хочу, чтобы пользователи могли создавать сообщения, и на пост они будут загружать изображения.Теперь, когда этот пост создан, я хочу, чтобы комментаторы могли добавлять комментарии и загружать различные изображения на соответствующей странице поста.

Я создал модель блога с постами и комментариями, без проблем.Я также добавил скрепку и создал функциональность, чтобы добавить опцию «загрузить изображение» в сообщения и комментарии.Но я только смог заставить изображения постов появляться на странице показа (которая является фидом всех текущих постов) и на страницах отдельных постов.Я пытаюсь добавить изображения в комментарии, и по какой-то причине я получаю неправильный путь, что приводит к сообщению "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 голосов
/ 21 января 2011

Я хочу, чтобы комментаторы могли добавлять комментарии и загружать разные изображения на соответствующей странице поста

Я не до конца понимаю, хотите ли вы иметь возможность загружать несколько изображенийдля одного сообщения или комментария.

Чтобы предоставить вам такую ​​возможность, я бы создал фотомодель, и именно она имеет ассоциацию скрепки.

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

И тогда возникает вопрос:это фото принадлежит как комментарию, так и сообщению?для этого вы можете использовать полиморфные ассоциации.

Этот учебник делает то, что вы хотите (замените Product на Post), но вам придется расширять его полиморфными ассоциациями, чтобы он работал с обоими комментариями.и сообщения.

...