Скрепка не сохраняется, ошибок нет - PullRequest
4 голосов
/ 19 ноября 2010

Я споткнулся - просмотрел документы, руководства и т. Д., И не уверен, что я делаю неправильно.

Другая модель в проекте настроена для Paperclip и работает при тестировании. Он сохраняет и извлекает информацию о файле вложения в базу данных и помещает файл в подпапку public / system. Я в основном скопировал соответствующий код в модель, над которой я работаю

Модель имеет следующую строку:

has_attached_file :document

Таблица, с которой связана модель, имеет необходимые столбцы:

document_file_name 
document_content_type
document_file_size
document_updated_at

Представление редактирования имеет это (в хамле):

%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)

Когда я сохраняю экземпляр модели, я вижу в журнале, что Rails знает о файле, который я пытаюсь загрузить:

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"}

Тем не менее, значения дБ вообще не обновляются для четырех столбцов document_*, они остаются равными NULL. Другие столбцы в той же таблице обновляются нормально.

Просто чтобы убедиться, что столбцы БД названы правильно, я изменил столбцы БД на что-то другое и получил ошибку при попадании в представление, поэтому я знаю, что столбцы БД названы правильно.

Чтобы проверить извлечение вложений, я вручную создал подпапки внутри public / system (куда вложение было бы при сохранении экземпляра модели), а также вручную изменил четыре столбца document_* в таблице. Затем я перешел к тому же представлению выше, и оно показало правильную привязанность, о которой идет речь.

Я заметил, что я также не могу удалить вложение, когда установлен флажок "remove_document". Значения в БД для document_* остаются без изменений.

Это как если бы операция чтения в этих 4 столбцах работала, а операция записи - нет (хотя я могу заставить Rails изменять другие столбцы в той же таблице, если я изменяю что-то в экземпляре модели на странице представления редактирования) ,

Есть идеи, что я могу здесь делать неправильно? Я уверен, что пропустил что-то очевидное.

1 Ответ

8 голосов
/ 19 ноября 2010

Как вы обновляете модель Article в контроллере? Вы используете @article.update_attributes(params[:article])?

Причина, если это так, может быть вызвано неправильным использованием attr_protected или attr_accessible. В этом случае вы можете попытаться присвоить файл с помощью

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