accepts_nested_attributes_for в сочетании с formtastic и скрепкой

Я пытаюсь создать простую ассоциацию «один ко многим». Я пытаюсь обновить фотографии, принадлежащие альбому, через вложенную форму:

Форма редактирования фотоальбома:

<%= semantic_form_for(@album, :url => user_album_path(@user, @album), :html => {:method => :put} ) do |f| %>
 <%= f.inputs do %>
  <%= f.input :title %>
  <%= f.input :description %>
 <% end %>
 <%= f.inputs :for => :photos do |builder|%>
  <%= builder.input :_destroy, :as => :boolean %>
 <% end %>
 <%= f.submit "Submit", :disabled_with => 'Submiting...' %>
<% end %>

Работает и не работает одновременно. Очевидно, что с заголовком и описанием проблем нет, а formtastic корректно делает чекбокс для каждой фотографии в альбоме. Но тут у меня уже есть первый вопрос:

1) Как я могу отобразить фото рядом с флажком? Мне удалось решить это самостоятельно:

<%= image_tag(builder.object.image.url(:album)) %>

Отображает изображение.

Вот альбом и модель альбома:

class Album < ActiveRecord::Base

  belongs_to          :user
  has_many            :photos, :dependent => :destroy

  #attr_accessible     :title, :description 

  validates_presence_of :title, :description

  accepts_nested_attributes_for :photos, :allow_destroy => true
end

И фото модели:

class Photo < ActiveRecord::Base
  belongs_to        :user
  belongs_to        :album

  has_attached_file :image, :styles => { :original => ["441x800>", :png], 
                                         :album => ["140x140#", :png], 
                                         :tiny => ["16x16#", :png] }

  validates_attachment_presence :image
  validates_attachment_content_type :image, :content_type => ["image/jpeg", "image/png", "image/gif"]
 end

Контроллер альбома:

def update
    @user = User.find(params[:user_id])
    @album = @user.albums.find(params[:id])
    if @album.update_attributes(params[:album][:photos_attributes])
      flash[:success] = t('users.flash.album_updated')
      redirect_to @user
    else
      render :edit
    end
end

Вылетела ошибка:

ActiveRecord::UnknownAttributeError in AlbumsController#update

unknown attribute: 0
Rails.root: /Users/stefanohug/orangerie

Application Trace | Framework Trace | Full Trace
app/controllers/albums_controller.rb:50:in `update'
Request

Parameters:

{"_snowman"=>"☃",
 "_method"=>"put",
 "authenticity_token"=>"bE4AidmbaVoG9XBqolCxheyWtd7qeltkIpMRgd8c4Fw=",
 "album"=>{"title"=>"lol",
 "description"=>"hihi",
 "photos_attributes"=>{"0"=>{"_destroy"=>"1",
 "id"=>"72"},
 "1"=>{"_destroy"=>"1",
 "id"=>"73"},

Строка 50 соответствует строке update_attributes.

Спасибо за вашу помощь людям.

Стеф


person Stephan1990    schedule 29.10.2010    source источник


Ответы (1)


Я нашел ошибку. Это было в контроллере:

@album.update_attributes(params[:album][:photos_attributes])

должен прочесть:

@album.update_attributes(params[:album])

Мда... :D

person Stephan1990    schedule 29.10.2010