Ruby 1.87 Rails 3.03 и Devise.Изображение скрепки не сохраняется, хотя оно говорит, что оно находится в файле журнала - PullRequest
1 голос
/ 11 декабря 2010

Я получил скрепку для работы на моей системе без проблем.В этом недавнем приложении, которое я создавал, по какой-то причине я не могу получить скрепку для сохранения изображения, хотя файл журнала говорит, что это так, он не отображается в базе данных sql.

Единственное различие, которое у меня есть, это использование Devise и вопрос о том, есть ли какие-то дополнительные настройки, которые мне нужно изменить.

В файле журнала написано:

Started POST "/users/1" for 127.0.0.1 at Fri Dec 10 14:56:52 -0800 2010

Обработка UsersController #обновить как параметры HTML: {"commit" => "Update", "authenticity_token" => "JexxammsT + VPzqwbLr / YohuY4vcpBFdfVrOwDjDQEUo =", "utf8" => «✓», «id» => «1», «user»=> {"avatar" => #, @ headers = "Content-Disposition: form-data; name = \" user [avatar] \ "; filename = \" Nice-Smile.jpg \ "\ r \ nContent-Type: image / jpeg \ r \ n ", @ content_type =" image / jpeg ", @ original_filename =" Nice-Smile.jpg ">}} Загрузка пользователя (3,1 мс) ВЫБРАТЬ" users ". * ИЗ" users "WHERE ("users". "id" = 1) LIMIT 1 Пользовательская нагрузка (0,5 мс) ВЫБЕРИТЕ "users". "id" FROM "users" WHERE ("users". "email" = 'mrussellharrison@gmail.com') AND ("users" .id <> 1) LIMIT 1 [paperclip] Сохранение вложенияц.Перенаправлено на http://localhost:3000/users/1 Завершено 302 Найдено за 124 мс

Запущен GET "/ users / 1" для 127.0.0.1 в пт. 10 декабря 14:56:52 -0800 2010 Обработка UsersController # показать как HTMLПараметры: {"id" => "1"} User Load (3.1ms) ВЫБРАТЬ "users". * FROM "users" WHERE ("users". "Id" = 1) LIMIT 1 CACHE (0.0ms) SELECT "users". * FROM" users "WHERE (" users "." Id "= 1) LIMIT 1 Рендеринг пользователей / _basic_info.html.erb (2.0ms) Рендеринг макетов / _stylesheets.html.erb (5.2 мс) Рендеринг макетов / _header.html.erb (12,1 мс) Рендеринг макетов / _footer.html.erb (2,4 мс) Рендеринг пользователей / show.html.erb в макетах / приложение (47,2 мс) Выполнено 200 OK за 167 мс (Просмотры: 62,2 мс | ActiveRecord: 6,6 мс)

Запущен GET "/avatars/small/missing.png" для 127.0.0.1 в пт 10 декабря 14:56:53 -0800 2010

Запущен GET "/ avatars / small / missing.png "для 127.0.0.1 в пт. 10 декабря 14:56:53 -0800 2010

ActionController :: RoutingError (нет совпадений маршрутов) /avatars/small/missing.png"):

Вот мой контроль пользователейer:

  class UsersController < ApplicationController
  def home
    @user = User.find(params[:id])
  end

  def index
    @user = User.all
    @title = "All users"
  end

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

  def create
    @user = User.new(params[:user])
    if @user.save
      flash[:notice] = "Profile Updated"
      redirect_to @user
    else
      render :action => 'new'
    end
  end

  def update
    @user = User.find(params[:id])
    if @user.update_attributes(params[:product])
      flash[:notice] = "Profile Updated"
      redirect_to @user
    else
      render :action => 'edit'
    end
  end


end

А вот моя модель пользователя:

  class User < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :token_authenticatable, :lockable, :timeoutable and :activatable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

  # Setup accessible (or protected) attributes for your model
  attr_accessible :email, :password, :password_confirmation, :first_name, :last_name, :avatar
  attr_accessible :bio, :sex, :birthday, :facebook, :twitter, :hometown, :current_city, :interested_in, :looking_for

  validates :first_name,  :presence => true,  
                    :length   => { :maximum => 50 }

  validates :last_name,  :presence => true,  
                    :length   => { :maximum => 50 }

  has_attached_file :avatar, :styles => { :thumb  => "50x50#",
                                          :small  => "150x150>",
                                          :medium => "300x200>",
                                          :large  => "600x600>"   },
                    :url  => "/assets/users/:id/:basename/:style.:extension",
                    :path => ":rails_root/public/assets/users/:id/:basename/:style.:extension"


  validates_attachment_size :avatar, :less_than => 5.megabytes
  validates_attachment_content_type :avatar, :content_type => ['image/jpeg', 'image/jpg', 'image/png', 'image/gif']


end

Я много раз пробовал много раз, но не уверен, почему файл не сохраняется.Спасибо за любую помощь заранее.

Ответы [ 2 ]

2 голосов
/ 16 декабря 2010

Вы поместили тег html => {: multipart => true} в своей форме?

Пример:

<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name), :html => { :method => :put, :multipart => true }) do |f| %>
  <%= devise_error_messages! %>
  <div class="blockForm">
    <p>
      <%= f.label :name %>
      <%= f.text_field :name %>
    </p>

    <p>
      <%= f.label :email %>
      <%= f.text_field :email %>
    </p>
    <p>
      <%= f.label :avatar %>
      <%= f.file_field :avatar %>
    </p>
    <p>
      <%= f.label :password %>
      <%= f.password_field :password %>
      <span>Deixe em branco caso não queira alterar a senha</span>
    </p>

    <p>
      <%= f.label :password_confirmation %>
      <%= f.password_field :password_confirmation %>
    </p>

    <p>
      <%= f.label :current_password %>
      <%= f.password_field :current_password %>
      <span>Coloque a sua senha para salvar as alterações</span>
    </p>
  </div>
  <p><%= f.submit "Atualizar", :class => 'button' %></p>
<% end %>
0 голосов
/ 21 апреля 2011

не уверен, связано ли это, но просто заметил строку

if @user.update_attributes(params[:product])

в вашем коде. это было причиной?

...