Rails 3&回形针问题

时间:2011-02-06 22:23:34

标签: ruby-on-rails-3 paperclip

我是rails的新手,并试图让paperclip在我的网站上为用户个人资料工作。我在我的gemfile和bundle中安装了paperclip gem。我有一个问题使用:has_attached_file所以我然后使用'rails plugin install github / path / to / paperclip.git'并重新启动webrick。之后,所有内容似乎都在渲染我的新表单并为我提供上传文件的选项。

当我尝试将照片上传到用户个人资料时,它只会让我回到用户的页面,而不会告诉我它已成功更新并且没有显示我新上传的图像。如果您更改名称或电子邮件地址,它会调整它。看起来它实际上并没有将图像放入Github上自述文件中列出的回形针路径。在这里有一些配置文件,我没有看到?

我运行'rails generate paperclip用户照片',下面是一些相关的代码:

来自models / user.rb

class User < ActiveRecord::Base
  attr_accessible :name, :email

  email_regex = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
  validates :name,  :presence   => true,
                    :length     => { :maximum => 50 }
  validates :email, :presence   => true,
                    :format     => { :with => email_regex },
                    :uniqueness => { :case_sensitive => false }

  #code below tells rails that our users have photos
  has_attached_file :photo
end

来自views / users / show.html.erb:

<b>Username: </b><%= @user.name %>
<p><b>Email Address: </b><%= @user.email %></p>
<p><b>Avatar: </b><% if @user.photo? %><%= image_tag @user.photo.url %><% else %>No      Photo Uploaded!<% end %></p>

来自views / users / _form.html.erb

<% form_for :user, @user, :url => user_path, :html => { :multipart => true } do |f| %>
  <p>
    <%= f.label :name.to_s << ': ' %>
    <%= f.text_field :name %>
  </p>
  <p>
    <%= f.label 'Email Address:' %>
    <%= f.text_field :email %>
  </p>

  <p>
    <%= f.label :Avatar.to_s << ': ' %>
    <%= f.file_field :photo %>
  </p>
  <p>
    <%= f.submit 'Save' %>
  </p>
<% end %>

编辑:添加控制器代码: 来自controllers / users_controller.rb:

class UsersController < ApplicationController

  before_filter :authenticate, :except => [:index]

  def new
    @user = User.new
  end

 def create
    @user = User.new(params[:user])

    respond_to do |format|
      if @user.save
        format.html { redirect_to(@user, :notice => 'User was successfully created.') }
        **code removed for brevity**
      end
 end
end

2 个答案:

答案 0 :(得分:0)

有些问题:您是否在rake db:migrate之后运行了rails generate paperclip user photo?在您的控制器中,您实际上有一个show方法来加载已保存的用户,从而显示照片吗?

同时要显示:notice消息,您需要使用<%= flash[:notice] =>将其添加到应用程序模板中的某个位置。

答案 1 :(得分:0)

我已经解决了这个问题。这个问题似乎是我在新用户和编辑用户界面上使用_form部分的问题。我在原始问题中留下了错误的模板代码,我将在此处发布固定代码。 :user和:url =&gt;价值被删除。

来自/views/user/_form.html.erb

<% form_for @user, :html => { :multipart => true } do |f| %>
  <p>
    <%= f.label :name.to_s << ': ' %>
    <%= f.text_field :name %>
  </p>
  <p>
    <%= f.label 'Email Address:' %>
    <%= f.text_field :email %>
  </p>

  <p>
    <%= f.label :Avatar.to_s << ': ' %>
    <%= f.file_field :photo %>
  </p>
  <p>
    <%= f.submit 'Save' %>
  </p>
<% end %>