Я слежу за Railscast для PaperClip и установил ImageMagick.
Я также следил за его видео и кодом. Загруженное изображение отлично отображается в одном виде, но отсутствует в другом. По сути, я пытаюсь загрузить одно и то же изображение для отображения на обеих страницах вместо одной.
При проверке элемента изображения в Chrome я получаю следующее:
<img alt="Missing" src="/photos/medium/missing.png?1316405973">
Вот моя форма:
<%= form_for @micropost, :html => { :multipart => true } do |f| %>
<%= render 'shared/error_messages', :object => f.object %>
<div class="field">
<%= f.text_area :content %>
</div>
<div class="actions">
<%= f.submit "Submit" %>
</div>
<div class="photo">
<%= f.file_field :photo %>
</div>
<% end %>
Вот моя модель "микросообщений", так как я следую учебнику по рельсам
class Micropost < ActiveRecord::Base
attr_accessible :content, :photo, :photo_file_name, :photo_content_type, :photo_file_size, :photo_updated_at
belongs_to :user
has_attached_file :photo,
:url => "/assets/products/:id/:style/:basename.:extension",
:path => ":rails_root/public/assets/products/: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
А вот мой файл _micropost.html.erb с тегом image_tag в строке 4.
**** Обратите внимание, что я удалил переменную @ instance перед словом micropost. Это не соответствует примеру, потому что я получаю сообщение No Method Error: undefined метод `photo 'для nil: NilClass, когда я превращаю его в переменную экземпляра. После удаления я могу получить изображение для отображения. **
<tr>
<td class="micropost">
<span class="content"><%= micropost.content %></span>
<%= image_tag micropost.photo.url(:medium) %> #### This is the code added ########
<span class="timestamp">
....
....
...
</td>
<% end %>
</tr>
Однако на странице канала я использую переменную экземпляра @micropost, в противном случае я получаю NameError в Pages # home, неопределенную локальную переменную или метод `micropost 'для Class. Если сделать его переменной экземпляра, то, по крайней мере, что-то отобразится на странице. Это вид с отсутствующим изображением.
feed_item.html.erb
<tr>
<td class="gravatar">
...
...
</span>
<span class="content"><%= feed_item.content %></span>
<%= image_tag @micropost.photo.url(:medium) %> #### inserted code##
<span class="timestamp">
Posted <%= time_ago_in_words(feed_item.created_at) %> ago.
....
....
<% end %>
</tr>
**** РЕДАКТИРОВАТЬ **
Вот мой код контроллера:
class MicropostsController < ApplicationController
before_filter :authenticate, :only => [:create, :destroy]
before_filter :authorized_user, :only => :destroy
def create
@micropost = current_user.microposts.build(params[:micropost])
if @micropost.save
flash[:success] = "Blurb posted!"
redirect_to root_path
else
@feed_items = []
render 'pages/home'
end
end
Кто-нибудь знает, что не так?