предупреждение: невозможно массовое назначение защищенных атрибутов (с использованием скрепки) - PullRequest
1 голос
/ 01 февраля 2012

Я думаю, что вложение не сохраняется в базе данных из-за этого предупреждения. Я пробовал разные варианты атрибутов attr_accessible, но я всегда получаю это предупреждение или ошибку "неизвестный атрибут: upfile". Итак, мой код:

post.rb

class Post < ActiveRecord::Base
  has_many :comments, :as => :commentable
  belongs_to :user
  has_many :attaches, :as => :uploadable, :dependent => :destroy

  attr_accessible :title, :body, :commentable, :attach_attributes
  accepts_nested_attributes_for :attaches
end

attach.rb:

require 'paperclip'
class Attach < ActiveRecord::Base
  belongs_to :uploadable, :polymorphic => true

  has_attached_file :upfile
  attr_accessible :upfile
end

предупреждение:

Parameters: {"utf8"=>"✓", "authenticity_token"=>"m+81lxu25R0Fu2bHUJthIBU265V+kDo+6wcL3BcFwoc=", "post"=>{"title"=>"sdfsdfsdf", "body"=>"sdfdsfsdfsd", "commentable"=>"0", "upfile"=>#<ActionDispatch::Http::UploadedFile:0x00000003d35290 @original_filename="www.rubyonrails (1).com", @content_type="application/octet-stream", @headers="Content-Disposition: form-data; name=\"post[upfile]\"; filename=\"www.rubyonrails (1).com\"\r\nContent-Type: application/octet-stream\r\n", @tempfile=#<File:/tmp/RackMultipart20120201-2498-1ef2jve>>}, "commit"=>"Submit"}
WARNING: Can't mass-assign protected attributes: upfile

Если я изменю attr_accessible, например, на ": title,: body,: commentable,: upfile", я получу эту ошибку:

Parameters: {"utf8"=>"✓", "authenticity_token"=>"m+81lxu25R0Fu2bHUJthIBU265V+kDo+6wcL3BcFwoc=", "post"=>{"title"=>"dfsdf", "body"=>"sdfsdfsdf", "commentable"=>"0", "upfile"=>#<ActionDispatch::Http::UploadedFile:0x007f011c0559f0 @original_filename="www.rubyonrails (1).com", @content_type="application/octet-stream", @headers="Content-Disposition: form-data; name=\"post[upfile]\"; filename=\"www.rubyonrails (1).com\"\r\nContent-Type: application/octet-stream\r\n", @tempfile=#<File:/tmp/RackMultipart20120201-2498-qvfih5>>}, "commit"=>"Submit"}
Completed 500 Internal Server Error in 4ms
ActiveRecord::UnknownAttributeError (unknown attribute: upfile):

Использование ruby ​​1.9.3, рельсов 3.2.0, скрепки 2.5.2

1 Ответ

1 голос
/ 02 февраля 2012

Проблема была во взглядах. Необходимо использовать fields_for для вложенных ресурсов:

<%= f.fields_for :attaches do |a| %>
  name: <%= a.text_field :name %>
  attach: <%= a.file_field :upfile %>
<% end %>

И нет attr_accessible в post.rb и attach.rb

...