0

ユーザーがArticleという名前のモデルに2つの異なるタイプの画像をアップロードできるサンプルアプリケーションを構築しようとしています。1つのタイプの画像は記事のコンテンツで使用される画像であり、もう1つのタイプはサムネイルとして使用されます。どちらのタイプの画像も、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

ArticleImage

class ArticleImage < ActiveRecord::Base
  belongs_to :attachable, polymorphic: true
  attr_accessible :article_image

  mount_uploader :article_image, ArticleImageUploader
end

ArticleThumb

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

  mount_uploader :article_thumb, ArticleThumbUploader
end

new.html.erb

<%= 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 %>

このエラーは非常に簡単な修正が必要なだけだと感じていますが、理解できないようです。どんな助けでもいただければ幸いです。

ちなみに、異なるタイプの画像/ファイルをアップロードするたびに異なるモデルを作成する必要がないように、すべての異なるアップローダーを単一のポリモーフィックモデルにマウントするのが効率的かどうか疑問に思いました。時間がない場合は、わざわざ答える必要はありませんが、どんな言葉でも大歓迎です!

4

1 に答える 1

0

まず第一に、ArticleThumbモデルにタイプミスがあります。:article_thumb属性を持っている必要attr_accessibleがありますが、代わりに持っています:atricle_image

<%= f.file_field :article_thumb %>もう1つは、simple_fields_forブロックにラップせずarticle_thumb、Articleの属性のように動作することです。

于 2013-03-11T11:36:14.410 に答える