2014-10-18 3 views
0

Я пытаюсь добавить Скрепку к Forem-based Rails app:Самовольная параметры: photos_attributes

Живого приложение: http://runnable.com/VEEnRTEK-igg4XGD/forem-with-paperclip-for-ruby-on-rails

Но почему я получаю Unpermitted parameters: photos_attributes после загрузки?

photo.rb

class Photo < ActiveRecord::Base 
    belongs_to :post, :class_name => "Forem::Post" 
    has_attached_file :attachment, :styles => { 
    :medium => "300x300>", 
    :thumb => "100x100>" 
    } 
    validates_attachment_presence :attachment 
end 

decorators/controllers/forem/topics_controller_decorator.rb

Forem::TopicsController.class_eval do 
    def new 
    authorize! :create_topic, @forum 
    @topic = @forum.topics.build 
    post = @topic.posts.build 
    post.photos.build 
    end 
end 

decorators/controllers/forem/posts_controller_decorator.rb

Forem::PostsController.class_eval do 
    def create 
    @post = @topic.posts.new(post_params) 
    @post.user = forem_user 
    end 

protected 
    def post_params 
    params.require(:post).permit(:text, :password, :email, :photos_attributes) 
    end 
end 

decorators/models/forem/posts_decorator.rb

Forem::Post.class_eval do 
    has_many :photos 

    accepts_nested_attributes_for :photos 
end 

app/views/forem/posts/_post.html.erb

<% for photo in post.photos %> 
    <%= image_tag photo.attachment.url(:medium) %> 
<% end %> 

app/views/forem/posts/_form.html.erb

<%= f.simple_fields_for :photos do |photo| %> 
    <%= render :partial => "photos/form", :locals => { :f => photo }%> 
<% end %> 

app/views/photos/_form.html.erb

<%= f.file_field :attachment, :id => "photo_attachment" %> 

Выход:

Started POST "/default/topics" at 2014-10-17 17:35:28 +0000 
Processing by Forem::TopicsController#create as HTML 
Parameters: {"utf8"=>"?", "authenticity_token"=>"rCLEcuRvkWU8Jsr+cEjtC1tTF97JGx/9ii54Gw9H42E=", "topic"=>{"subject"=>"asdasdasda", "posts_attributes"=>{"0"=>{"text"=>"dasdasdasd", "photos_attributes"=>{"0"=>{"attachment"=>#<ActionDispatch::Http::UploadedFile:0x0000000490f048 @tempfile=#<File:/tmp/RackMultipart20141017-634-1by49l4>, @original_filename="download.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"topic[posts_attributes][0][photos_attributes][0][attachment]\"; filename=\"download.jpg\"\r\nContent-Type: image/jpeg\r\n">}}}}}, "commit"=>"Create Topic", "forum_id"=>"default"} 
[1m[36mUser Load (0.3ms)[0m [1mSELECT "users".* FROM "users" WHERE "users"."id" = 1 ORDER BY "users"."id" ASC LIMIT 1[0m 
[1m[35mForem::Forum Load (0.2ms)[0m SELECT "forem_forums".* FROM "forem_forums" WHERE "forem_forums"."slug" = 'default' ORDER BY "forem_forums"."name" ASC LIMIT 1 
[1m[36mForem::Category Load (0.1ms)[0m [1mSELECT "forem_categories".* FROM "forem_categories" WHERE "forem_categories"."id" = ? LIMIT 1[0m [["id", 1]] 
Unpermitted parameters: photos_attributes 
[1m[35m (0.1ms)[0m begin transaction 
[1m[36mForem::Topic Exists (0.2ms)[0m [1mSELECT 1 AS one FROM "forem_topics" WHERE ("forem_topics"."id" IS NOT NULL) AND "forem_topics"."slug" = 'asdasdasda' LIMIT 1[0m 
[1m[35mSQL (0.4ms)[0m INSERT INTO "forem_topics" ("created_at", "forum_id", "slug", "subject", "updated_at", "user_id") VALUES (?, ?, ?, ?, ?, ?) [["created_at", "2014-10-17 17:35:28.968381"], ["forum_id", 1], ["slug", "asdasdasda"], ["subject", "asdasdasda"], ["updated_at", "2014-10-17 17:35:28.968381"], ["user_id", 1]] 
[1m[36mSQL (0.2ms)[0m [1mINSERT INTO "forem_posts" ("created_at", "text", "topic_id", "updated_at", "user_id") VALUES (?, ?, ?, ?, ?)[0m [["created_at", "2014-10-17 17:35:28.970016"], ["text", "dasdasdasd"], ["topic_id", 15], ["updated_at", "2014-10-17 17:35:28.970016"], ["user_id", 1]] 
[1m[35mForem::Topic Load (0.0ms)[0m SELECT "forem_topics".* FROM "forem_topics" WHERE "forem_topics"."id" = ? LIMIT 1 [["id", 15]] 
[1m[36mSQL (0.3ms)[0m [1mUPDATE "forem_topics" SET "last_post_at" = '2014-10-17 17:35:28.970016' WHERE "forem_topics"."id" = 15[0m 
[1m[35mForem::Subscription Load (0.1ms)[0m SELECT "forem_subscriptions".* FROM "forem_subscriptions" WHERE "forem_subscriptions"."topic_id" = ? ORDER BY "forem_subscriptions"."id" ASC LIMIT 1000 [["topic_id", 15]] 
[1m[36mSQL (0.1ms)[0m [1mUPDATE "forem_posts" SET "notified" = 't' WHERE "forem_posts"."id" = 15[0m 
[1m[35mSQL (0.1ms)[0m UPDATE "forem_posts" SET "state" = 'approved' WHERE "forem_posts"."id" = 15 
[1m[36m (0.1ms)[0m [1mSELECT COUNT(*) FROM "forem_subscriptions" WHERE "forem_subscriptions"."topic_id" = ? AND "forem_subscriptions"."subscriber_id" = 1[0m [["topic_id", 15]] 
[1m[35mSQL (0.1ms)[0m INSERT INTO "forem_subscriptions" ("subscriber_id", "topic_id") VALUES (?, ?) [["subscriber_id", 1], ["topic_id", 15]] 
[1m[36mSQL (0.1ms)[0m [1mUPDATE "forem_topics" SET "state" = 'approved' WHERE "forem_topics"."id" = 15[0m 
[1m[35m (8.0ms)[0m commit transaction 
Redirected to http://web-025a9cdf-c1cd-4f15-b7e7-54558afbdf6c.runnable.com/default/topics/asdasdasda 
Completed 302 Found in 123ms (ActiveRecord: 10.7ms) 

ответ

2

Этот ответ просто охватывает ваш вопрос. Ваша ошибка была в имени контроллера. Создание темы осуществляется с помощью Forem :: TopicsController. Это исправленная версия.

#app/decorators/controllers/forem/topics_controller.rb 
Forem::TopicsController.class_eval do 
    def new 
    authorize! :create_topic, @forum 
    @topic = @forum.topics.build 
    post = @topic.posts.build 
    post.photos.build 
    end 
    def create 
    @topic = @forum.topics.new(topic_params) 
    if @topic.save 
     redirect_to @topic 
    else 
     render :new 
    end 
    end 

    protected 
    def topic_params 
     params.require(:topic).permit(:subject, :posts_attributes => [ :text, {:photos_attributes => [:attachment]} ]) 
    end 
end 

Вторая ошибка в отношении самих скрепки. Папка из версии 4 требует проверки типа содержимого. Это исправленная фотомодель.

#app/models/photo.rb 
class Photo < ActiveRecord::Base 
    belongs_to :post, :class_name => "Forem::Post" 
    has_attached_file :attachment, :styles => { 
    :medium => "300x300>", 
    :thumb => "100x100>" 
    } 
    validates_attachment :attachment, presence: true, content_type: { content_type: ["image/jpg", "image/jpeg", "image/png", "image/gif"] } 
end 

Проверьте это на сервере, потому что работоспособные не имеет ImageMagick не установлено, который требуется для вложения скрепки изображения.

+0

Боюсь, что фото не будет отображаться после загрузки. Я использую Rails 4.1.2. Вы проверили живое приложение? Войдите в систему 'admin @ example.com' /' admin1234'. –

+0

Вы неправильно читаете свои журналы, и я неправильно читаю ваш код. Журнал сообщает, что создание темы с изображением обрабатывается с помощью Forem :: TopicsController, а не с помощью Forem :: PostsController. Вы должны копать таким образом – railsme

+0

только что обновил мой ответ. проверьте это – railsme

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