Я пытаюсь создать очень основное приложение Rails для размещения изображений с комментарием. Комментарий является обязательным полем, и загрузка изображения должна идти только в том случае, если раздел комментариев имеет значение, в противном случае отображается сообщение об ошибке. Проблема, с которой я столкнулась, заключается в том, что даже когда заполняется раздел комментариев, все еще отображается сообщение об ошибке, которое не может быть пустым. Я попытался добавить attr_accessor с именами полей html и значениями базы данных, но это не имеет никакого значения.
class Post < ActiveRecord::Base
has_attached_file :picture, styles: { medium: "300x300>", thumb: "100x100>" }
attr_accessor :picture_file_name
attr_accessor :post_description
validates :description, presence: true
end
class PostsController < ApplicationController
def index
@posts = Post.all
end
def new
@post = Post.new
end
def create
@post = Post.new params[:post].permit(:description, :picture)
if @post.save
redirect_to '/posts'
else
render 'new'
end
end
end
<% if @post.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@post.errors.count, "error") %> prohibited this post from being saved:</h2>
<ul>
<% @post.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<%= form_for @post, :html => { :multipart => true } do |f| %>
<%= f.label :description %>
<%= f.text_area :description %>
<%= f.label :picture %>
<%= f.file_field :picture %>
<%= f.submit %>
<% end %>
=> Booting WEBrick
=> Rails 4.0.4 application starting in development on http://0.0.0.0:3000
=> Run 'rails server -h' for more startup options
=> Ctrl-C to shutdown server
[2014-04-20 17:59:07] INFO WEBrick 1.3.1
[2014-04-20 17:59:07] INFO ruby 2.1.0 (2013-12-25) [x86_64-darwin12.0]
[2014-04-20 17:59:07] INFO WEBrick::HTTPServer#start: pid=98772 port=3000
Started POST "/posts" for 127.0.0.1 at 2014-04-20 17:59:21 +0100
ActiveRecord::SchemaMigration Load (0.2ms) SELECT "schema_migrations".* FROM "schema_migrations"
Processing by PostsController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"nVrCEAdT+epbltQWR74jtv1weGaq6H7YbWQKFfJNDTw=", "post"=>{"description"=>"test comment", "picture"=>#<ActionDispatch::Http::UploadedFile:0x0000010242f740 @tempfile=#<Tempfile:/var/folders/lm/vrw53rx91831vrh4228m0mfw0000gn/T/RackMultipart20140420-98772-1c9msrz>, @original_filename="dory_2.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"post[picture]\"; filename=\"dory_2.jpg\"\r\nContent-Type: image/jpeg\r\n">}, "commit"=>"Create Post"}
WARNING: Can't mass-assign protected attributes for Post: description, picture
app/controllers/posts_controller.rb:12:in 'create'
(0.1ms) begin transaction
(0.1ms) rollback transaction
Rendered posts/new.html.erb within layouts/application (13.1ms)
Completed 200 OK in 105ms (Views: 65.6ms | ActiveRecord: 0.4ms)
Я нашел проблему. Проблема заключалась в том, что я изначально установил последнюю версию Paperclip и затем переоценил ее. Я добавил следующий камень, когда искал решение
gem 'protected_attributes'
Это заставило все обязательные поля не регистрировать их заполнение, например, в поля регистрации пользователя и т.д. После удаления этого драгоценного камня он работал нормально.
Ваши параметры и форма выглядят нормально
Но я бы изменил ваши сильные параметры, чтобы быть более условными:
def create
@post = Post.new(post_params)
@post.save
end
private
def post_params
params.require(:post).permit(:description, :picture)
end
params[:post]
содержит изображение и описание? (попробуйте распечатать его только для двойной проверки)