私の目標は、アイテムが collection_select から選択解除されたときに、保存されたレコードを更新できるようにすることです (その後、そのレコードが再送信されます)。
詳細
Newsavedmaps のフォームがあります。ニュース保存済みマップには、多くのウェイポイントを含めることができます。ユーザーは collection_select でウェイポイントを選択でき、Newsavedmap を保存すると、これらのウェイポイントは独自のデータベース テーブルに保存されます。
問題: ユーザーが保存した Newsavedmap を開くときに、ウェイポイントの選択を解除できるようにしてほしい。Newsavedmap を再度保存するときに、選択を解除したウェイポイントを削除したいと考えています。
これは私が管理している Rails 2.3X アプリです。そのため、collection_select は以下の別の形式を使用しています。
モデル
class Newsavedmap < ActiveRecord::Base
belongs_to :itinerary
has_many :waypoints, :dependent => :destroy
accepts_nested_attributes_for :waypoints, :reject_if => lambda { |a| a[:waypointaddress].blank? }, :allow_destroy => true
end
意見
<% form_for @newsavedmap, :html => { :id => 'createaMap' } do |f| %>
<%= f.error_messages %>
<%= f.text_field :name, {:id=>"savemap_name", :size=>30 }%></p>
<%= collection_select :waypoints, :waypointaddress, @newsavedmap.waypoints, :waypointaddress, :waypointaddress, {}, { :multiple => true, :class => "mobile-waypoints-remove", :id =>"waypoints" } %>
<% end %>
Newsavedmaps コントローラー
def create
@newsavedmap = Newsavedmap.new(params[:newsavedmap])
waypoint = @newsavedmap.waypoints.build
respond_to do |format|
if @newsavedmap.save
flash[:notice] = 'The new map was successfully created.'
format.html { redirect_to "MYURL"}
format.xml { render :xml => @newsavedmap, :status => :created, :location => @newsavedmap }
else
format.html { render :action => "new" }
format.xml { render :xml => @newsavedmap.errors, :status => :unprocessable_entity }
end
end
end
def update
@newsavedmap = Newsavedmap.find(params[:id])
if @newsavedmap.itinerary.user_id == current_user.id
respond_to do |format|
if @newsavedmap.update_attributes(params[:newsavedmap])
flash[:notice] = 'Newsavedmap was successfully updated.'
format.html { redirect_to "MYURL" }
format.xml { head :ok }
else
format.html { render :action => "edit" }
format.xml { render :xml => @newsavedmap.errors, :status => :unprocessable_entity }
end
end
else
redirect_to '/'
end
end
新しいレコードを作成するときのパラメータ
パラメータ: {"newsavedmap"=>{"name"=>"私の地図の名前", 他のフィールドは上に表示されない, "waypoints"=>{"waypointaddress"=>["1600 Pennsylvania Ave NW, Washington, DC 20500" , "350 5th Ave, New York, NY 10118"]}}