Rails и Paperclip с вложенными моделями: загрузка из формы не работает - PullRequest
2 голосов
/ 05 декабря 2010

В настоящее время я пытаюсь создать приложение для создания фотогалереи, в котором фотографии доступны только через интерфейс галереи. Галерея => has_many: фотографии, Фото => принадлежат_ к: галерее. Все это работает нормально.

Однако сейчас я пытаюсь предоставить моим фотографиям прикрепленный файл: изображение. Я сделал все, что Нит говорит в его уроке , и я только что добавил validates_attachment_presence: image. Перед проверкой фотомодель работала нормально, за исключением того, что после сохранения модели с изображением изображение так и не появилось. Теперь с проверкой, после выбора изображения для загрузки, я получаю: flash =>

1 error prohibited this photo from being saved

There were problems with the following fields:

    * Image file name must be set.

Так что здесь происходит? Соответствующий код ниже:

модель / фото

 class Photo < ActiveRecord::Base
    attr_accessible :gallery_id, :name, :rating

    belongs_to :gallery
    validates_associated :gallery

    has_attached_file :image
    validates_attachment_presence :image

  end

просмотры / фото / _form.html.erb

<% form_for [@gallery, @photo], :html => { :multipart => true } do |f| %>
  <%= f.error_messages %>
  <p>
    <%= f.label :name %><br />
    <%= f.text_field :name %>
  </p>
  <p>
    <% if @photo.image? %>
      <%= image_tag @photo.image.url %><br />
      <%= link_to @photo.image.url, @photo.image.url %>
    <% end %>
    <%= f.label :image %><br />
    <%= f.file_field :image %>
  </p>
  <p><%= f.submit %></p>
<% end %>

Модели / gallery.rb

class Gallery < ActiveRecord::Base
  attr_accessible :name, :user_id, :shoot_date

  # destroy all photos when a gallery is destroyed
  has_many :photos, :dependent => :destroy

end

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

Обновление: вот выход Mongrel из транзакции попытки загрузки:

Processing PhotosController#update (for 127.0.0.1 at 2010-12-05 14:19:29) [PUT]
  Parameters: {"photo"=>{"name"=>"blah", "image"=>#<File:/tmp/RackMultipart20101205-2909-wo2g7z-0>}, "commit"=>"Save changes", "id"=>"10", "gallery_id"=>"3"}
  Gallery Columns (0.6ms)   SHOW FIELDS FROM `galleries`
  Gallery Load (0.1ms)   SELECT * FROM `galleries` WHERE (`galleries`.`id` = 3) 
  Photo Columns (0.7ms)   SHOW FIELDS FROM `photos`
  Photo Load (0.1ms)   SELECT * FROM `photos` WHERE (`photos`.`id` = 10 AND (`photos`.gallery_id = 3)) 
WARNING: Can't mass-assign these protected attributes: image
  SQL (0.1ms)   BEGIN
  CACHE (0.0ms)   SELECT * FROM `galleries` WHERE (`galleries`.`id` = 3) 
  SQL (0.1ms)   ROLLBACK
Rendering template within layouts/application
Rendering photos/edit
Rendered photos/_form (64.1ms)
Completed in 83ms (View: 67, DB: 2) | 200 OK [http://localhost/galleries/3/photos/10]

1 Ответ

3 голосов
/ 05 декабря 2010

Разобрался.Скинул вывод mongrel в гугл и вот мы:

http://railsforum.com/viewtopic.php?id=35544

В основном они забывают сказать вам добавить: изображение в список attr_accessible.

Photo model changed to 
class Photo < ActiveRecord::Base
    attr_accessible :gallery_id, :name, :rating, :image

    belongs_to :gallery
    validates_associated :gallery

    has_attached_file :image
    validates_attachment_presence :image

  end
...