2014-10-10 5 views
0

Я пытаюсь добавить несколько фотографий в проект, используя камень Paperclip в Rails 4.Rails 4 несколько снимков с Скрепка

Изображение не загружается в базу данных. Использование MySQL.

Я получаю эту ошибку:

2 ошибки запрещен эту тему форума из спасаемых:

Фотографий типа контент фото недействителен

Фотография фото недействительно

Параметры запроса:

Parameters: {"utf8"=>"✓", "authenticity_token"=>"zoMHhVTJOy0/VVGNCcVrTaFwmSRvYoonQEtc+TAqwCM=", "project"=>{"photos_attributes"=>{"0"=>{"photo"=>#<ActionDispatch::Http::UploadedFile:0x007f98f0d4b468 @tempfile=#<Tempfile:/var/folders/gp/jz4_vlrs2l96__g4jrnsc3y40000gn/T/RackMultipart20141010-4840-1gtf4ao>, @original_filename="glyphicons-halflings-white.png", @content_type="image/png", @headers="Content-Disposition: form-data; name=\"project[photos_attributes][0][photo]\"; filename=\"glyphicons-halflings-white.png\"\r\nContent-Type: image/png\r\n">}}, "title"=>"sadfsadfdsa", "description"=>"sdfsdafsdf"}, "commit"=>"Create Project"} 

Я добавил необходимые файлы ниже.

** Новый проект Эрба/HTML файлов **

<% provide(:title, "New Project") %> 

<div class="page-header"> 
<h2>New Project</h2> 
</div> 

<%= form_for @project, :html => { :multipart => true } do |f| %> 
<% if @project.errors.any? %> 
<div id="error_explanation"> 
<h2><%= pluralize(@project.errors.count, "error") %> prohibited this forum topic from being saved: </h2> 
    <ul> 
    <% @project.errors.full_messages.each do |msg| %> 
    <li><%= msg %></li> 
    <% end %> 
    </ul> 
</div> 
<%= f.fields_for :photos do |f| %> 
    <div class="form-group"> 
    <%= f.file_field :photo , class: 'form-group' %> 
    </div> 
<% end %> 

<div class="form-group"> 
<%= f.text_area :title, class: 'form-control input-lg', placeholder: 'Topic Title' %> 
</div> 
<div class="form-group"> 
<%= f.text_area :description, rows: 4, class: 'form-control', placeholder: 'Topic Description' %> 
</div> 

<div class="actions"> 
<%= f.submit class: 'btn btn-success'%> 
</div> 
<% end %> 

Проекты Контроллер: Модель

class ProjectsController < ApplicationController 
    before_filter :authenticate_user!, except: [:show, :index] 
    before_filter :set_project, except: [:index, :new, :create] 

def index 
@projects = Project.find(:all) 
end 

def show 
end 

def new 
@project = Project.new 
3.times {@project.photos.build} 
end 

def create 
@project = current_user.projects.build(project_params) 
    if @project.save 
    flash[:success] = "Project Created!" 
    redirect_to @project 
    else 
    render :new 
    end 
end 

def edit 
3.times {@project.photos.build} 
end 

def update 
if @project.update_attributes(project_params) 
    flash[:notice] = "Successfully updated your project." 
    redirect_to @project 
else 
    render :edit 
    end 
end 

def destroy 
end 

private 

# Never trust parameters from the scary internet, only allow the white list through. 
def project_params 
params.require(:project).permit(:title, :description, photos: [], photos_attributes:[:photo, :id]) 
end 

def set_project 
@project = Project.find(params[:id]) 
end 

Проект:

class Project < ActiveRecord::Base 
    belongs_to :user, counter_cache: true 
    has_many :photos 

    default_scope -> { order('created_at DESC') } 
    validates :title, presence: true, length: {maximum: 50} 
    validates :description, presence: true, length: { maximum: 1000 } 
    validates :user_id, presence: true 

    accepts_nested_attributes_for :photos, :reject_if => lambda { |t| t[:photo].nil? } 

    def photos=(files = []) 
    files.each{|f| (@images ||= []) << photos.create(image: f) } 
    end 
end 

Фото Модель:

class Photo < ActiveRecord::Base 
belongs_to :user, counter_cache: true 
belongs_to :project, counter_cache: true 

has_attached_file :photo, :styles => { :small => "150x150>", :large => "320x240>" } 
validates_attachment_presence :photo 
validates_attachment_size :photo, :less_than => 5.megabytes 
validates_attachment :photo, content_type: { content_type: ["photo/jpg", "photo/jpeg", "photo/png", "photo/gif"] } 
end 

фотография миграция:

class AddPhotosToPhotos < ActiveRecord::Migration 
def self.up 
    add_column :photos, :photo_file_name, :string 
    add_column :photos, :photo_content_type, :string 
    add_column :photos, :photo_file_size, :integer 
    add_column :photos, :photo_updated_at, :datetime 
end 

def self.down 
remove_column :photos, :photo_file_name 
remove_column :photos, :photo_content_type 
remove_column :photos, :photo_file_size 
remove_column :photos, :photo_updated_at 
end 
end 

фотография миграция для индексов

class CreatePhotos < ActiveRecord::Migration 
def change 
    create_table :photos do |t| 
    t.integer :user_id 
    t.integer :project_id 
    t.timestamps 
    end 
    end 
end 

Development.rb

Paperclip.options[:command_path] = "/usr/local/bin/" 

ответ

0

Во-первых, ошибка типа контента - изменить validates_attachment типам изображений:

validates_attachment :photo, content_type: { content_type: ["image/jpg", "image/jpeg", "image/png", "image/gif"] } 

Что касается других ошибок, похоже, он здесь возникает:

<%= f.fields_for :photos do |f| %> 
    <div class="form-group"> 
     <%= f.file_field :photo , class: 'form-group' %> 
    </div> 
    <% end %> 

Возможно, возникла проблема с единственной фотографией во множественном числе fields_for. По общему признанию, я не проверял документацию. Если нет, вам потребуется дополнительная информация об ошибке для устранения неполадок. Что происходит, когда вы вызываете project_params в действии create?

+0

Хорошая вероятность того, что исправление проверки содержимого позаботится о другой ошибке, будем надеяться на это. – bjorn

+0

Спасибо, что ответили! Изменение полей fields_for до «Photo» и validates_attachment не сработало. Я считаю, что изменение типа контента на «образ» поставило меня на правильный путь, но проблема происходит где-то еще в коде. –

Смежные вопросы