Rails 3 и выпуск Paperclip - PullRequest
       0

Rails 3 и выпуск Paperclip

0 голосов
/ 07 февраля 2011

Я очень плохо знаком с рельсами и пытаюсь заставить работать скрепку для профилей пользователей на моем сайте. Я установил скрепку в моем gemfile и установил комплект. У меня возникла проблема с использованием: has_attached_file, поэтому я использовал 'rails plugin install github / path / to / paperclip.git' и перезапустил webrick. После этого все, казалось, работало, вплоть до рендеринга моей новой формы и предоставления мне возможности загрузить файл.

Когда я пытаюсь загрузить фотографию в профиль пользователя, он просто возвращает меня на страницу пользователя, не сообщая, что она была успешно обновлена, и не показывая мое недавно загруженное изображение. Он меняет имя или адрес электронной почты, если вы меняете их. Не похоже, что оно фактически помещает изображение в путь, указанный в файле readme на Github для paperclip. Здесь какой-то конфигурационный файл я не вижу?

Я запустил «rails Generate paperclip user photo», и ниже приведен соответствующий код:

Из моделей / 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

Из просмотров / пользователей / 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>

Из просмотров / пользователей / _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 голосов
/ 07 февраля 2011

Я исправил это.Похоже, что проблема заключалась в том, что часть _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 %>
0 голосов
/ 07 февраля 2011

Некоторые вопросы: вы запускали rake db:migrate после rails generate paperclip user photo?В вашем контроллере действительно есть метод show, который загружает сохраненного пользователя и, таким образом, отображает фотографию?

Также для отображения сообщения :notice необходимо добавить его где-нибудь в шаблоне приложения с помощью <%= flash[:notice] =>.

...