ここでチュートリアルのスクリーンキャストに従いました: 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
誰かが私にヒントをくれますか?どうもありがとう!