ユーザーがajaxを使用してアセットをアップロードできるフォームがあります。これにより、作成時にPostオブジェクトに関連付けたい多くのAssetオブジェクトが作成されます。作成されたアセットIDで更新するasset_idsという名前のform_fieldがあります。Postオブジェクトを作成し、そのデータにassign_attributesを入力すると、IDがいくつあっても、関連付けは1つだけ作成されます。
資産モデル:
class Asset < ActiveRecord::Base
attr_accessible :caption, :image
belongs_to :post
has_attached_file :image, :styles => { :large => "600x600>", :medium => "300x300>", :thumb => "100x100>" }
end
ポストモデル:
class Post < ActiveRecord::Base
attr_accessible :content, :post_date, :status, :title, :tag_list, :asset_ids, :as => :admin
has_many :assets, :dependent => :destroy
has_and_belongs_to_many :tags
validates :content, :post_date, :title, :presence => true
end
投稿されたデータハッシュの例:
{"title"=>"Test post", "status"=>"true", "post_date"=>"01/02/2013", "content"=>" Some content", "tag_list"=>"", "asset_ids"=>"97,102"}
上記の例では、次のようにassign_attributesを実行すると、新しい投稿に1つのアセット(ID 97)のみが割り当てられます。
@post = Post.new
@post.assign_attributes params[:post], :as => :admin