Я пытаюсь добавить несколько фотографий в проект, используя камень 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/"
Хорошая вероятность того, что исправление проверки содержимого позаботится о другой ошибке, будем надеяться на это. – bjorn
Спасибо, что ответили! Изменение полей fields_for до «Photo» и validates_attachment не сработало. Я считаю, что изменение типа контента на «образ» поставило меня на правильный путь, но проблема происходит где-то еще в коде. –