更新
如果我从此行中删除reject_if:
accepts_nested_attributes_for :image_blogs, :reject_if => lambda { |t| t['image_blog'].nil? }
它有效,如何修改它以按预期工作并在nil时阻止图像创建?
我使用以下教程创建带图像的帖子: http://sleekd.com/general/adding-multiple-images-to-a-rails-model-with-paperclip/ 目标是拥有一个包含0-n图像博客的帖子元素。 images blog是一个包含回形针的模型。我试图在post和post的同时创建image_blog元素。为此,我使用嵌套表格。
class PostsController < ApplicationController
def new
@post = Post.new
3.times{ @post.image_blogs.build}
respond_to do |format|
format.html # new.html.erb
format.xml { render :xml => @post }
end
end
end
-
class ImageBlog < ActiveRecord::Base
belongs_to :post
attr_accessible :image
has_attached_file :image , :styles => { :small => "150x150>", :large => "320x240>" }
end
-
class Post < ActiveRecord::Base
has_many :image_blogs, :dependent => :destroy
validates :title, :content, :presence => true
validates :title, :uniqueness => true
acts_as_taggable
has_attached_file :image
accepts_nested_attributes_for :image_blogs, :reject_if => lambda { |t| t['image_blog'].nil? }
end
-
<%= form_for(@post,:html => { :multipart => true }) do |f| %>
<div class="field">
<%= f.label :title %><br />
<%= f.text_field :title %>
</div>
<div class="field">
<%= f.label :content %><br />
<%= f.text_area :content, :class => "mceEditor" %>
</div>
<%= f.fields_for :image_blogs, do |ib|%>
<p>
<%= ib.label "Image du post"%>
<%= ib.file_field :image %>
<%#= ib.check_box :_destroy%>
<%#= ib.label :_destroy,"Effacer l'image" %>
</p>
<% end %>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
我使用不同的有关嵌套回形针的教程检查了一切是否正确,但它仍然无法正常工作。邮件已创建,但不会复制图像,也不会创建图像博客元素。
为什么没有错误?为什么不起作用?
答案 0 :(得分:3)
我相信你必须对lambda内的accepts_nested_attributes_for
稍作修改,你正在评估的对象是image(ImageBlog的属性)而不是image_blog,这样:
accepts_nested_attributes_for :image_blogs, :reject_if => lambda { |t| t['image'].nil? }