Использование rails 3.1.1, Ruby 1.9.2, Gems: gem 'haml', gem 'simple_form', gem 'aws-sdk',
gem 'paperclip',: git => "git: //github.com/thoughtbot/paperclip.git"
плагин: country_select: git: //github.com/rails/country_select.git
Возникла проблема с загрузкой / отображением изображений, загружаемых в Amazon S3 через скрепку (GEM) Ошибка: неопределенный метод `avatar_file_name 'для #Player: 0x00000102aff228
По большей части я следовал примеру на странице git-hub для скрепки https://github.com/thoughtbot/paperclip
Вот что яесть в моем коде:
Миграция: 20111224044508_create_players.rb
class CreatePlayers < ActiveRecord::Migration
def change
create_table :players do |t|
t.string :first_name
t.boolean :first_name_public, :default => false
...
t.string :website
t.boolean :website_public, :default => false
t.has_attached_file :avatar
t.timestamps
end
end
end
Модель: Player.rb:
class Player < ActiveRecord::Base
attr_accessible :first_name, ... :website
validates_presence_of :username, :email
has_attached_file :avatar,
:styles => { :medium => "300x300>", :thumb => "100x100>" },
:storage => :s3,
:s3_credentials => "#{Rails.root}/config/s3.yml",
:path => ":class/:id/:style/:filename"
{Unrelated validations}
end
Файл S3: s3.yml
development:
bucket: voh_development
access_key_id: *********************
secret_access_key: ********************
staging:
bucket: voh_staging
access_key_id: *********************
secret_access_key: ********************
production:
bucket: voh_production
access_key_id: *********************
secret_access_key: ********************
Контроллер: Players_controller.rb
class PlayersController < ApplicationController
def create
@player = Player.create(params[:player])
if @player.save
redirect_to players_path, :notice => "Player Created";
else
render :action => 'new'
end
end
{basic restful}
end
Просмотров: Edit.html.haml + New.html.haml
= simple_form_for @player do |f|
= f.input :first_name
...
= f.input :website
= f..file_field :avatar
.input_div
= f.button :submit
index.html.haml
...
%td Avatar
%td First Name
...
%td Actions
- @players.each do |player|
%tr
%td
= image_tag @player.avatar.url(:thumb)
%td
= player.first_name
...
%td
= link_to ' Show ', player_path(player.id)
|
= link_to ' Edit ', edit_player_path(player.id)
show.html.haml
= image_tag @user.avatar.url
%br
= @player.first_name
...
Исследования: я нашел много общего с миграцией и поколением миграции, но все это кажется старым.Большинство из них предлагают включить в миграцию вверх-вниз для 4 атрибутов.Однако, похоже, это должно было быть заменено одной строкой t.has_attached_file: avatar.
У меня есть проект rails 3.0, и это сработало.Я могу загружать продукты и возвращать их обратно.(пришлось поиграть с предложенным image_tag @ icon.avatar.url и превратить его в% img {: src => URI.unescape (icon.icon.url)}, но это другой вопрос.)