Скрепка не хранит файл на моей унаследованной модели - PullRequest
1 голос
/ 14 февраля 2012

(я новичок в скрепке)

У меня есть эта иерархия моделей:

базовая модель:

class QuestDescription < ActiveRecord::Base
end

наследственная модель:

class ImageDescription < QuestDescription
  has_attached_file :img
end

и я использую наследование одной таблицы от ActiveRecord

[часть] schema.rb:

create_table "quest_descriptions", :force => true do |t|
  t.string   "type"
  t.datetime "img_updated_at"
  t.integer  "img_file_size"
  t.string   "img_file_name"
  t.string   "img_content_type"
  t.datetime "created_at",         :null => false
  t.datetime "updated_at",         :null => false
end

Контроллер ImageDescription:

class ImageDescriptionsController < ApplicationController

  def new
    @imgD = ImageDescription.new
  end

  def create
    @imgD=ImageDescription.new(params[:imgD])
    if @imgD.save
      redirect_to :back, :flash => {:notice => "saved"} 
    else
      redirect_to :back, :flash => {:error => "error"} 
    end
  end

  def show
    @imgD=ImageDescription.find(params[:id])
  end
end    

новый вид (с использованием formtastic):

<%= semantic_form_for @imgD do |form| %>
  <%= form.input :img%>
  <%= form.actions %>
<%end%>

просмотр представления:

<%= image_tag @imgD.img.url %>

когда я использую новый вид (и выбираю файл для загрузки), POST работает, но файл не сохраняется / не прикрепляется, «img_file_size», «img_file_name», «img_content_type» устанавливаются в nil.

Если я попытаюсь показать это, результатом будет «пропущенное» поле.

EDIT:

Если я пытаюсь создать ImageDscription из консоли, он работает:

ImageDescription.create(:img => File.new(Rails.root + "public/images/grid.png"))
    (0.1ms) begin transaction
    SQL (31.9ms) INSERT INTO "quest_descriptions" ("created_at", "img_content_type", "img_file_name", "img_file_size", "img_updated_at", "type", "updated_at") VALUES (?, ?, ?, ?, ?, ?, ?) ["created_at", Wed, 15 Feb 2012 00:07:48 UTC +00:00], ["img_content_type", "image/png"], ["img_file_name", "grid.png"], ["img_file_size", 206], ["img_updated_at", Wed, 15 Feb 2012 00:07:48 UTC +00:00], ["type", "ImageDescription"], ["updated_at", Wed, 15 Feb 2012 00:07:48 UTC +00:00] commit transaction
    => #

Ответы [ 2 ]

0 голосов
/ 15 февраля 2012

действительно глупая ошибка:

@imgD=ImageDescription.new(params[:imgD])

ничего не значит ... правая строка

@imgD=ImageDescription.new(params[:image_description])
0 голосов
/ 15 февраля 2012

Вам нужно определить, что ваш пост содержит какой-то файл внутри с HTML-тегом, состоящим из нескольких частей

<%= semantic_form_for @imgD, :html => { :multipart => true } do |form| %>
  <%= form.input :img%>
  <%= form.actions %>
<%end%>
...