2010-11-19 6 views
4

Je suis tombé - a traversé docs, tutoriels, etc, et je ne suis pas sûr de ce que je fais mal.Trombone ne pas enregistrer, pas d'erreurs

Un autre modèle dans le projet est mis en place pour Paperclip et est fonctionnel lorsqu'il est testé. Il enregistre et récupère les informations du fichier joint dans la base de données et place le fichier dans un sous-dossier dans public/system. Je essentiellement copié le code correspondant sur vers le modèle que je travaille sur

Le modèle a la ligne suivante:

has_attached_file :document 

Le tableau, le modèle est lié à, comporte des colonnes nécessaires:

document_file_name 
document_content_type 
document_file_size 
document_updated_at 

La vue de modifier a cette (en haml):

%h1 Knowledge Base: Edit Article 
= message_block :on => @article 

- form_for(@article, :url => knowledge_base_article_path(@article), :html => {:multipart => true}) do |f| 

    #knowledgebase.clearfix 
    %label Upload KB Document: 
    %br 
    = f.file_field :document 
    - if @article.document.exists? 
     %p 
     = link_to "Current KB Attachment", @article.document.url 
     %p 
     = f.check_box :remove_document 
    <br> 

    = render :partial => "form", :locals => {:f => f} 
    = submit_tag "Save changes" 
    = link_to "Cancel", knowledge_base_article_path(@article) 

Lorsque j'enregistre les tenants du modèle tance, je peux voir dans le journal que Rails est au courant du dossier, je suis en train de télécharger:

Processing KnowledgeBase::ArticlesController#update (for 127.0.0.1 at 2010-11-18 19:21:01) [PUT] 
    Parameters: {"article"=>{"document"=>#<File:/var/folders/EZ/EZKwznNSGq4PAI4ll9NUD++++TI/-Tmp-/RackMultipart20101118-58632-19nvbc8-0>, "question"=>"Craig's Sandbox", "active"=>"0", "answer"=>"Nothing here, this is to test attachment functionality"}, "commit"=>"Save changes", "action"=>"update", "_method"=>"put", "authenticity_token"=>"MfH6RgLAQLnRBuf9WxgqWA+mIrDoBtYF+d4MW5DNCC0=", "id"=>"886", "controller"=>"knowledge_base/articles"} 

Cependant, les valeurs db ne sont pas mis à jour à tous les quatre document_ * colonnes, ils restent NULL. Les autres colonnes de la même table sont mises à jour correctement.

Juste pour être sûr que les colonnes db sont correctement nommés, j'ai changé les colonnes de db à quelque chose d'autre et eu erreur sur frapper la vue, donc je sais que les colonnes db sont correctement nommés. Pour tester la récupération des pièces jointes, j'ai créé manuellement des sous-dossiers dans public/system (où la pièce jointe se serait trouvée lorsque l'instance du modèle a été enregistrée), et j'ai également modifié manuellement les quatre colonnes document_ * du tableau. Je suis ensuite allé à la même vue ci-dessus, et il a montré l'attachement correct en question.

je remarquai que je suis incapable de supprimer la pièce jointe lorsque « remove_document » est cochée. Les valeurs db pour document_ * restent inchangées. C'est comme si l'opération de lecture sur ces 4 colonnes fonctionnait, mais pas l'opération d'écriture (bien que Rails puisse modifier d'autres colonnes dans la même table si je modifie quelque chose dans l'instance de modèle sur la page d'édition d'édition).

Toutes les idées que je pourrais faire mal ici? Je suis sûr que j'ai manqué quelque chose d'évident.

Répondre

8

Comment allez-vous mettre à jour le modèle Article dans le contrôleur? Utilisez-vous @article.update_attributes(params[:article])? Cause Si vous êtes alors il peut être dû à une utilisation incorrecte de attr_protected ou attr_accessible. Dans ce cas, vous pouvez essayer d'affecter le fichier avec

@article.document = params[:article][:document] 
+1

MERCI. Le coupable était en effet dans le contrôleur, il est maintenant fixé. J'ai eu params [: some_namespace_before_article] au lieu de params [: article] et il est maintenant résolu! Marquage comme résolu. –

Questions connexes