J'essaie actuellement de créer une application de galerie de photos où les photos ne sont accessibles que via une interface de galerie. Galerie => has_many: photos, Photo => appartient à: galerie. Tout cela fonctionne bien.Rails et Paperclip avec des modèles imbriqués: le téléchargement à partir du formulaire ne fonctionne pas
Cependant, maintenant j'essaie de donner à mes photos un fichier joint: image. J'ai fait tout ce que Neath dit au his tutorial, et je viens d'ajouter validates_attachment_presence: image. Avant la validation, le modèle photo fonctionnait bien, sauf qu'après avoir enregistré un avec une image, l'image ne s'est jamais montrée. Maintenant, avec la validation, après avoir sélectionné une image à télécharger, je reçois un: Flash =>
1 error prohibited this photo from being saved
There were problems with the following fields:
* Image file name must be set.
Alors qu'est-ce qui se passe ici? Code correspondant ci-dessous:
modèles/photo
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
vues/photos/_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 %>
modèles/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
Je pense que je J'ai mis en place la forme multi-parties correctement, et je pense que j'ai déjà eu ce problème quand j'ai essayé un modèle de trombone sans imbrication de modèles. Est-ce que je manque quelque chose?
Mise à jour: voici la sortie Mongrel forment la transaction de téléchargement tentative:
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]