Использование скрепки во вложенной форме: отклонить, если неверно - PullRequest
0 голосов
/ 24 ноября 2011

ОБНОВЛЕНИЕ

Если я уберу reject_if из этой строки:

accepts_nested_attributes_for :image_blogs, :reject_if => lambda { |t| t['image_blog'].nil? }

Это работает, как его можно изменить, чтобы оно работало как задумано, и предотвратить создание изображения при нулевом значении?


Я использую следующий учебник для создания сообщения с изображениями: http://sleekd.com/general/adding-multiple-images-to-a-rails-model-with-paperclip/ Цель состоит в том, чтобы создать элемент сообщения, содержащий блог с 0-n изображениями.Блог изображений - это модель, содержащая скрепку.Я пытаюсь создать элементы 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 %>

Я проверил, чтовсе было правильно, используя разные учебники о вложенной скрепке, но она все равно не работает.Сообщение создано, но изображения не копируются, а элементы изображения не создаются.

Почему нет ошибок?почему не работает?

1 Ответ

3 голосов
/ 25 августа 2012

Я полагаю, что вы должны внести небольшую поправку в accepts_nested_attributes_for, внутри лямбды, оцениваемый объект - это изображение (атрибут ImageBlog) вместо image_blog, таким образом:

accepts_nested_attributes_for :image_blogs, :reject_if => lambda { |t| t['image'].nil? }
...