私は単純な一対多の関連付けをしようとしています。ネストされたフォームを介してアルバムに属する写真を更新しようとしています:
フォト アルバムの編集フォーム:
<%= 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 行に対応します。
助けてくれてありがとう。
ステフ