Проблема со скрепкой для accepts_nested_attributes_for и reject_if - PullRequest
2 голосов
/ 22 января 2011

Я разрабатываю приложение рельсов 3.

class Post < ActiveRecord::Base
  has_many :attachments
  has_many :photos
  accepts_nested_attributes_for :attachments, :allow_destroy => true, :reject_if => proc { |attrs| attrs['document'].blank? }
  accepts_nested_attributes_for :photos, :allow_destroy => true, :reject_if => proc { |attrs| attrs['image'].blank? }
end

class Attachment < ActiveRecord::Base
  belongs_to :post      
  has_attached_file :document
end

class Photo < ActiveRecord::Base
  belongs_to :post      
  has_attached_file :image, :styles => {
                                         :thumb  => "100x100#",
                                         :small  => "150x150>",
                                         :mid    => "640x640>",
                                         :large  => "800x800>"
                                       }

end

Проблема в том, что "_destroy" => "1" не работает для вложений и фотографий. Я понял, что если я уберу опцию reject_if, она будет работать. Что не так?

Спасибо.

Sam

1 Ответ

1 голос
/ 17 февраля 2011

Похоже, что с Rails 3.0.3 необходимо загрузить ассоциацию, которую вы хотите уничтожить (вложения, фотографии).Взгляните на этот билет .Быстрое решение, которое не так уж и элегантно, - загрузить вашу ассоциацию в метод обновления:

@post = Post.includes(:attachments).find(params[:id])

if @post.update_attributes(params[:post])
  redirect_to(posts_url, :notice => 'Post updated.'
else
  render :action => "edit"
end

К вашему сведению, это все еще необходимо для Rails 3.0.4.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...