3

ユーザーが多くのアルバムを持ち、各アルバムに多くの写真があるフォトアルバムを作成しています。

アルバムクラス

Class Album < ActiveRecord::Base

 attr_accessible :photos_attributes, :name
 has_many photos, :as => imageable
 accepts_nested_attributes_for :photos

end

写真教室

Class Photo < ActiveRecord::Base

 attr_accessible :description, :location
 belongs_to :imageable, :polymorphic => true

end

アルバム コントローラ メソッド

def create
  @album = current_user.albums.build(params[:album])
  if @album.save
    redirect_to @album, :notice => "Successfully created album."
  else
    render :action => 'new'
  end
end


def edit
  @album = Album.find(params[:id])
end


def update
  @album = Album.find(params[:id])
  if @album.update_attributes(params[:album])
    redirect_to @album, :notice  => "Successfully updated album."
  else
    render :action => 'edit'
  end
end

アルバム編集フォーム

<%= form_for @album do |f| %>
    <%= f.label :album_name %><br />
    <%= f.text_field :name %>

  <%= f.fields_for :photos do |photo| %>
    <%= photo.label :photo_description %>
    <%= photo.text_field :description %>

    <%= photo.label :photo_location %>
    <%= photo.text_field :location %>
  <% end %>

<% end %>

問題は、編集フォームが送信されると、photos_attributes がハッシュとして送信され、Rails が適切に更新されないことです。

  Parameters: { "album"=>{"user_id"=>"1", "name"=>"Lake Tahoe", 
                "photos_attributes"=>{"1"=>{"description"=>"Top of the Mountain!", "id"=>"2"}, 
                                      "2"=>{"description"=>"From the cabin", "id"=>"5"}}}, 
                "commit"=>"Update Ablum", "id"=>"10"}

photos_attributes ハッシュと共に送信される ID は、データベース内の photos テーブルの実際の ID です。なんらかの理由で、ユーザーが写真の説明や場所を編集しても、Rails はそれらを更新しません。写真がポリモーフィックであるという事実と関係があると思います。

誰か助けてくださいお願いできますか?? 私は数時間試行し、ウェブ全体を検索しましたが、解決策を見つけることができませんでした.

ありがとう!

4

1 に答える 1

0

これは、使用しているレールのバージョンによって異なる場合があります。< 3.2 では、has_many 関連付けに autosave 属性が必要だと思います。安全のために追加して、それがうまくいくかどうかを確認したいだけかもしれません。

また、ログをチェックして、リクエスト中に警告を受けていないことを確認してください。

于 2012-05-22T16:25:41.427 に答える