【问题标题】:Rails 3 & Paperclip issueRails 3和回形针问题
【发布时间】:2011-06-22 10:38:49
【问题描述】:

我对 Rails 非常陌生,并试图让回形针在我的网站上为用户配置文件工作。我在我的 gemfile 中设置了回形针 gem 并安装了包。我在使用 :has_attached_file 时遇到了问题,所以我使用了 'rails plugin install github/path/to/paperclip.git' 并重新启动了 webrick。在那之后,一切似乎都在渲染我的新表单并让我可以选择上传文件。

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

我运行了“rails 生成回形针用户照片”,下面是一些相关代码:

来自模型/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 %>

编辑:添加控制器代码: 来自控制器/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

【问题讨论】:

    标签: ruby-on-rails-3 paperclip


    【解决方案1】:

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

    还要显示:notice 消息,您需要在应用程序模板中的某处添加&lt;%= flash[:notice] =&gt;

    【讨论】:

    • 我确实运行了 rake db:migrate 来创建额外的列。 def show @user = User.find(params[:id]) -- 这是我在用户控制器中的显示操作。结束
    【解决方案2】:

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

    来自/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 %>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-26
      • 1970-01-01
      相关资源
      最近更新 更多