我有一个错误“无法批量分配受保护的属性:上传”,但我已将其指定为可访问。
这是一个具有多态关联的嵌套表单。
模型
class Upload < ActiveRecord::Base
attr_accessible :link, :post_id
belongs_to :uploadable, polymorphic: true
end
class Post < ActiveRecord::Base
attr_accessible :description, :title, :uploads_attributes
has_many :uploads, as: :uploadable
accepts_nested_attributes_for :uploads, :reject_if => lambda { |a| a[:content].blank?
}, :allow_destroy => true
end
我也试过把accept_nested ... for:uploadable但告诉我不存在关联
控制器上的新操作是
def new
@post = Post.new
@post.uploads.new
end
这是创建
的表单<%= form_for [:admin,@post], remote: true, :html => {:multipart => true} do |f| %>
<div class="field">
<%= f.label :title %><br />
<%= f.text_field :title%>
</div>
<div class="field">
<%= f.label :description%><br />
<%= f.text_area :description %>
</div>
<div>
<%= f.fields_for :upload do |builder| %>
<%= render 'upload_fields', f: builder %>
<% end %>
<%= link_to_add_fields "Add Upload", f, :uploads %>
</div>
<div class="actions">
<%= f.submit%>
</div>
<% end %>
部分......
<fieldset>
<%= f.label :file %><br />
<%= f.file_field :file %>
<%= f.hidden_field :_destroy %>
<%= link_to "remove", '#', class: "remove_fields" %>
</fieldset>
不要认为javascript会影响,所以我不打算把它放在这里。 我如何解决多态分析中的“无法大量分配受保护的属性”?
Plz需要帮助这个人。不能相信我不能上传文件,看起来如此简单的教程,它不工作,或我得到一个不能大规模分配或上传它没有保存....
答案 0 :(得分:0)
尝试使用@post.uploads.build
代替@post.uploads.new
答案 1 :(得分:0)
关联模型需要知道其父级的身份以保存关系。 我建议您使用以下railscast:Polymorphic Association.
#uploads_controller.rb
before_filter :load_uploadable
def create
@upload = @uploadable.uploads.new(params[:upload])
....
end
private
def load_uploadable
resource, id = request.path.split('/')[1, 2] # /posts/1
@uploadable = resource.singularize.classify.constantize.find(id)
end
答案 2 :(得分:-1)
您视图中的这一行:
<%= f.fields_for :upload do |builder| %>
应该是这样的:
<%= f.fields_for :uploadable do |builder| %>
因为Post
模型上的关联称为“可上传”,而非“上传”。
要使嵌套属性起作用,您需要指定模型接受此模型的嵌套属性,这可以通过将此行放在模型中的belongs_to
下面来完成:
accepts_nested_attributes_for :uploadable
然后你需要使这些属性可访问,你可以用它来做:
attr_accessible :uploadable_attributes