1

ここでチュートリアルのスクリーンキャストに従いました: http://www.emersonlackey.com/article/rails-paperclip-multiple-file-uploads。モデルに複数の写真のアップロードが表示されるようにします。

すべての手順を注意深く調べました。最も一般的な問題は、assets_attributes を attr_accessible に追加するのを忘れていることです。別の問題は、資産モデルに ID を追加するのを忘れている可能性があります。私もそれを行いました。しかし、なぜそれが起こるのか、私はまだ理解に苦しんでいます。

Can't mass-assign protected attributes: asset in app/controllers/posts_controller.rb:24:in `update'

Post to post モデルのすべての属性のリストを既に追加しています。お気に入り:

class Post < ActiveRecord::Base
  attr_accessible :name, :content, :assets_attributes 
  validates :user_id, presence: true
  belongs_to :user
  has_many :assets
  accepts_nested_attributes_for :assets, :allow_destroy => true
  default_scope order: 'posts.created_at DESC'
 end

post_controller.rb ファイルは次のとおりです。

 def edit
    @post = Post.find(params[:id])
    5.times { @post.assets.build }
 end
 def update
    @post = Post.find(params[:id])
    if @post.update_attributes(params[:post])      
          redirect_to @post, :notice => "Post has been updated."
 end
def create
    post = current_user.posts.build(params[:post])
    if post.save
        flash[:success] = "post created success!"
        redirect_to @post
    else
        @feed_items = []
        flash[:failure] = "post created fail!"
        redirect_to root_path
    end
 end
 def new
    @post = current_user.posts.new #if signed_in?
    5.times { @post.assets.build }
 end

テンプレートファイルは次のとおりです。

        <%= simple_form_for(@post, :html => {:multipart => true})  do |f| %>
           <%= f.label :name %>
           <%= f.text_field :name %>
           <%= f.label :content %>
           <%= f.text_field :content %>
           <%= f.simple_fields_for :assets, :html => { :multipart => true } do |asset_fields| %>
               <% if asset_fields.object.new_record? %>
                   <P><%= asset_fields.file_field :asset %> </P>
               <% end %>
           <% end %>
            <%= f.simple_fields_for :assets, :html => { :multipart => true } do |asset_fields| %>
               <% unless asset_fields.object.new_record? %>
                  <P><%= link_to image_tag(asset_fields.object.asset.url(:thumb)), asset_fields.objects.asset.url(:original) %>
                     <%= asset_fields.check_box :_destroy %></P>
               <% end %>
           <% end %>

以下はasset.rbです:

    class Asset < ActiveRecord::Base
      belongs_to :post
      has_attached_file :asset,
                :style => { :large => "640x480", :medium => "300x300", :thumb => "100x100"} ,
                :path => ":rails_root/public/system/posts/images/:id/:style/:filename",
                :url => "/system/posts/images/:id/:style/:filename"
    end

誰かが私にヒントをくれますか?どうもありがとう!

4

1 に答える 1

2

Assetモデルにも attr_accessible が必要です-特にフィールド用ですasset

于 2012-11-26T08:01:26.093 に答える