Скрепка "Gem" Rails 3.1 неопределенное имя файла модели метода - PullRequest
1 голос
/ 10 января 2012

Использование 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)}, но это другой вопрос.)

1 Ответ

1 голос
/ 10 января 2012

TLDR: исправлена ​​опечатка в index.html.haml из @player => player, добавлено: аватар для attr_accessible.

Я проснулся сегодня утром и получил другую ошибку.

вместо: неопределенный метод Avatar_file_name'

Я получил: неопределенный метод avatar' for nil:NilClass

Эта ошибка была вызвана покупкой простого типа в моем коде.Я использовал экземпляр vairable вместо переменной .each, которую я должен был использовать (index.html.haml: 9)

Теперь приложение не ошибалось, но файл все еще не загружался.В журнале разработки я нашел это.(Я не смотрел здесь в первый раз, когда я писал)

ПРЕДУПРЕЖДЕНИЕ: Не удается массово назначить защищенные атрибуты: avatar

Затем я добавил и добавил: Аватар для attr_accessible, и все начало работать.

Не уверен, требуется ли это, или нет, но я действительно видел, что они обновили заголовок S3, чтобы он был процедурой вчера.https://github.com/thoughtbot/paperclip/tree/master/test/storage

Я пока не собираюсь это закрывать.Будет редактирование, потому что я собираюсь поиграть с версией и быстро сообщить о своих выводах сегодня.Тогда я закрою это.

Редактировать: я попытался переключиться обратно на 2.4.5, и я получаю ошибку, которая заставила меня переключиться на вытягивание мастера в первую очередь.При попытке выполнить миграцию с помощью t.has_attached_file: avatar не удается выполнить миграцию и выдает следующую ошибку.

неопределенный метод has_attached_file для #ActiveRecord :: ConnectionAdapters :: PostgreSQLAdapter :: TableDefinition: 0x00000105053600

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

...