使用rails 3.1.1,Ruby 1.9.2,
宝石:宝石'haml',宝石'simple_form',宝石'aws-sdk',
gem'Paperclip',: git => “混帐://github.com/thoughtbot/paperclip.git”
插件:country_select:git://github.com/rails/country_select.git
通过回形针(GEM)上传/显示推送到Amazon S3的图像时出现问题 错误:#Player的未定义方法`avatar_file_name':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: ********************
Controller: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 =&gt; URI.unescape(icon.icon.url)}但这是一个不同的问题。)
答案 0 :(得分:1)
TLDR:修复了来自@player =&gt;的index.html.haml中的拼写错误玩家,已添加:attr_accessible的头像。
今天早上我醒来时遇到了不同的错误。
而不是:undefined method Avatar_file_name'
我得到了:未定义的方法avatar' for nil:NilClass
该错误导致在我的代码中购买一个简单的类型。我使用了一个实例vairable而不是我应该使用的.each变量(index.html.haml:9)
现在应用程序没有犯错,但文件仍未上传。 在开发日志中我找到了这个。 (我第一次发布时没看到这里)
警告:无法批量分配受保护的属性:头像
然后我去了补充:attr_accessible的头像,一切都开始工作了。
不确定这是否应该是必需的,但我确实看到他们昨天更新了S3标题为proc。 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
我想我会坚持从主人那里拉。