新手学Rails/paperclip - Paperclip无法保存

3
我是一个有帮助的助手,可以为您翻译文本。
我很新于编程,正在尝试使用paperclip将用户照片添加到我的用户记录中。可以从添加新记录表单创建记录,没有<%= f.file_field :photo %>行并正确重定向并保存记录到数据库。但是,当它包含在保存中时,它想要重定向到create.html.erb而不是用户路径,并且不保存新记录。它也不显示任何错误。我已经更新了用户表的photo_file_name、photo_content_type和:photo_file_size字段。此外,我正在运行Windows,如果这有任何帮助。
模型:
class User < ActiveRecord::Base
  has_many :venues
  has_many :reviews
  has_attached_file :photo,
    :styles => { 
      :medium => "300x300>", 
      :thumb => "100x100>" }
end

控制器:

class UsersController < ApplicationController

  def index
    @users = User.all
  end

  def new
    @user = User.new
  end

  def create
    @user = User.create(params[:user])
    if @user.save
      flash[:notice] = 'User added'
      redirect_to users_path
    else
      @user.save
    end
  end

  def show
    @user = User.find(params[:id])
  end
end

查看:

<% form_for (@user, :html => { :multipart => true }) do |f| %>

  <p>username: <br>
  <%= f.text_field :username %></p>

  <p>password: <br>
  <%= f.text_field :password %></p>

  <p>photo: <br>
  <%= f.file_field :photo %></p>

  <%= submit_tag %>
<% end %>

非常感谢您的帮助!

开发日志中显示的内容:

处理 UsersController#create(对于 127.0.0.1,时间为 2011-01-12 22:05:56 的 POST 请求) 参数:{"user"=>{"photo"=>#, "username"=>"nghjhg", "password"=>"ghjghj"}, "commit"=>"Save changes", "authenticity_token"=>"IlacpnqsC/iJ+41bx8tN4obOWPgirMx810l/WvohN68="} [paperclip] identify -format %wx%h "C:/Users/Home/AppData/Local/Temp/stream110112-5292-2yorcw-0.png[0]" 2>NUL [paperclip] 处理时发生错误:

C:/Users/Home/AppData/Local/Temp/stream110112-5292-2yorcw-0.png 无法被 'identify' 命令识别。> [paperclip] identify -format %wx%h "C:/Users/Home/AppData/Local/Temp/stream110112-5292-2yorcw-0.png[0]" 2>NUL [paperclip] 处理时发生错误:

C:/Users/Home/AppData/Local/Temp/stream110112-5292-2yorcw-0.png 无法被 'identify' 命令识别。> 在布局文件 layouts/application 中呈现模板,在 users/create 中呈现 完成时间 157ms(视图渲染时间:4ms,数据库查询时间:0ms) | 200 OK [http://localhost/users]

1个回答

3

在paperclip的文档中使用:avatar只是一个例子。在你的情况下应该改为:photo。你需要在模型文件和视图文件中都进行更改。

编辑

我刚刚注意到你控制器中的这部分内容:

if @user.save
  flash[:notice] = 'User added'
  redirect_to users_path
else
  @user.save # <<< here
end

这没有意义。如果第一次保存失败(返回 false),你只是再尝试而不更改任何内容吗?我怀疑这一行应该是 render :action => :new

编辑 2

你的日志显示你的 identify 命令无法识别 .png 文件。要么你没有安装 identify 命令,要么你没有安装 ImageMagick。如果有安装,你是如何安装的?


谢谢您的回答,我刚刚注意到我在问题中犯了一个错误。我迁移了带有avater_file_name、avater_content_type和avatar_file_size字段的用户表,而不是照片,对此很抱歉。现在它返回“User model missing required attr_accessor for 'photo_file_name'”。我已经重新迁移了'photo',但仍然无法保存。 - Dave
嗯,你已经将表格列名更改为使用“avatar _ *”而不是“photo _ *”,但你也更新了你的问题,使用“has_attached_file:photo”而不是“has_attached_file:avatar”。下定决心吧!哪个是正确的? - noodl
抱歉,我的原始问题有误,我已将用户表中的所有内容更改为photo_,我的模型、控制器和视图与上述内容相同。 - Dave
你的问题中仍然提到了头像,但是好吧,你已经在你的应用中删除了所有相关的提及。那么,有什么变化吗?你是否一直在按照开发日志文件进行开发?Paperclip 应该会记录它正在做什么(或尝试做什么)。 - noodl
谢谢指针,我已经在我的帖子底部添加了开发日志中显示的内容。 - Dave
我之前没有安装ImageMagick,但现在已经安装了,获取了二进制版本并且现在它可以工作了!非常感谢您的帮助,非常感激! - Dave

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接