Ruby on rails 钢轨托架波形-can';t质量分配受保护的属性错误

Ruby on rails 钢轨托架波形-can';t质量分配受保护的属性错误,ruby-on-rails,Ruby On Rails,我正在尝试构建一个示例应用程序,用户可以将两种不同类型的图像上传到名为Article的模型中。一种类型的图像是文章内容中使用的图像,另一种用作缩略图。这两种类型的图像都由名为ArticleImage和ArticleThumb的单独多态模型处理 问题是,每当我尝试上载缩略图时,它都会出现“无法批量保护受保护的属性::article_thumb”错误。对于其他类型的图像上载,不会发生此错误 文章 class Article < ActiveRecord::Base attr_accessi

我正在尝试构建一个示例应用程序,用户可以将两种不同类型的图像上传到名为Article的模型中。一种类型的图像是文章内容中使用的图像,另一种用作缩略图。这两种类型的图像都由名为ArticleImage和ArticleThumb的单独多态模型处理

问题是,每当我尝试上载缩略图时,它都会出现“无法批量保护受保护的属性::article_thumb”错误。对于其他类型的图像上载,不会发生此错误

文章

class Article < ActiveRecord::Base
  attr_accessible :title, :article_images_attributes, 
                  :article_thumbs_attributes

  has_many :comments, as: :commentable
  has_many :article_images, as: :attachable, dependent: :destroy
  has_many :article_thumbs, as: :attachable, dependent: :destroy

  accepts_nested_attributes_for :article_images, 
                                reject_if: :all_blank,
                                allow_destroy: true
  accepts_nested_attributes_for :article_thumbs, allow_destroy: true

  belongs_to :user

  validates :title, presence: true, length: {maximum: 60}
  validates :user_id, presence: true
  validates :article_images, presence: true
end
class ArticleImage < ActiveRecord::Base
  belongs_to :attachable, polymorphic: true
  attr_accessible :article_image

  mount_uploader :article_image, ArticleImageUploader
end
类文章
文章图像

class Article < ActiveRecord::Base
  attr_accessible :title, :article_images_attributes, 
                  :article_thumbs_attributes

  has_many :comments, as: :commentable
  has_many :article_images, as: :attachable, dependent: :destroy
  has_many :article_thumbs, as: :attachable, dependent: :destroy

  accepts_nested_attributes_for :article_images, 
                                reject_if: :all_blank,
                                allow_destroy: true
  accepts_nested_attributes_for :article_thumbs, allow_destroy: true

  belongs_to :user

  validates :title, presence: true, length: {maximum: 60}
  validates :user_id, presence: true
  validates :article_images, presence: true
end
class ArticleImage < ActiveRecord::Base
  belongs_to :attachable, polymorphic: true
  attr_accessible :article_image

  mount_uploader :article_image, ArticleImageUploader
end
class ArticleImage
ArticleThumb

class ArticleThumb < ActiveRecord::Base
  belongs_to :attachable, polymorphic: true
  attr_accessible :article_thumb

  mount_uploader :article_thumb, ArticleThumbUploader
end
<%= simple_nested_form_for @article, html: {multipart: true}, 
    defaults: {required: false} do |f| %>

  <%= render 'shared/error_messages', object: @article %>

  <%= f.input :title %>

  <div class = "control-label">
    Image file upload
  </div>
  <%= f.simple_fields_for :article_images do |p| %>
    <%= p.file_field :article_image %>
    <%= p.link_to_remove 'Remove' %>
  <% end %>
  <%= f.link_to_add 'Add image', :article_images %>
  <span class="hint_end">Acceptable file formats: JPG, JPEG, GIF, PNG</span>

  <div class = "control-label">
    Thumbnail upload
  </div>
  <%= f.file_field :article_thumb %>
  <span class="hint">
    Automatically resized to 90x90 px.
  </span>
  <span class="hint">
    Default thumbnail is used if no thumbnail gets uploaded.
  </span>
  <span class="hint_end">
    Acceptable file formats: JPG, JPEG, GIF, PNG
  </span>

  <%= f.submit "Upload article" %>
<% end %>
class ArticleThumb
new.html.erb

class ArticleThumb < ActiveRecord::Base
  belongs_to :attachable, polymorphic: true
  attr_accessible :article_thumb

  mount_uploader :article_thumb, ArticleThumbUploader
end
<%= simple_nested_form_for @article, html: {multipart: true}, 
    defaults: {required: false} do |f| %>

  <%= render 'shared/error_messages', object: @article %>

  <%= f.input :title %>

  <div class = "control-label">
    Image file upload
  </div>
  <%= f.simple_fields_for :article_images do |p| %>
    <%= p.file_field :article_image %>
    <%= p.link_to_remove 'Remove' %>
  <% end %>
  <%= f.link_to_add 'Add image', :article_images %>
  <span class="hint_end">Acceptable file formats: JPG, JPEG, GIF, PNG</span>

  <div class = "control-label">
    Thumbnail upload
  </div>
  <%= f.file_field :article_thumb %>
  <span class="hint">
    Automatically resized to 90x90 px.
  </span>
  <span class="hint">
    Default thumbnail is used if no thumbnail gets uploaded.
  </span>
  <span class="hint_end">
    Acceptable file formats: JPG, JPEG, GIF, PNG
  </span>

  <%= f.submit "Upload article" %>
<% end %>

图像文件上传
可接受的文件格式:JPG、JPEG、GIF、PNG
缩略图上传
自动调整大小为90x90像素。
如果未上载缩略图,则使用默认缩略图。
可接受的文件格式:JPG、JPEG、GIF、PNG
我有一种感觉,这个错误只需要一个非常简单的修复,但我似乎无法解决它。任何帮助都将不胜感激


作为旁注,我想知道在一个多态模型中装载所有不同的上传程序是否有效,这样您就不必每次上传不同类型的图像/文件时都创建不同的模型。如果你没有太多的时间,你当然不需要费心回答这个问题,但任何关于这个问题的话都是欢迎的

首先,您在
ArticleThumb
模型中有一个输入错误:您应该具有
:article\u thumb
属性,以便
attr\u可访问
,但您具有
:atricle\u image


另一件事是,对于
块,
不会在一个
简单的字段中进行包装,而
文章的行为就像文章的属性一样。

感谢您指出这一点。但是,问题仍然存在。那么,为什么不将
包装在
简单字段中以用于
块呢?在你的例子中,
article\u thumb
应该是article的属性,而不是article\u thumb。这是我醒来后尝试的第一件事,现在我在article\new中添加了
@article.article\u thumbs.new
。谢谢你抽出时间。