我的目標是能夠在從一個collection_select中取消選擇項目時更新已保存的記錄(然後重新提交該記錄。)在此先感謝您的幫助!如何在Rails中刪除使用collection_select保存的記錄?
詳細
我已經有了一個Newsavedmaps一種形式。 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賓夕法尼亞大道西北,華盛頓特區20500」,「350 5th Ave,紐約,紐約10118」]}}
你能發佈它們來自你的表單 – gotva
添加PARAMS。事實證明,上面的內容是在航點數據庫中創建一個新的空記錄(而不是每個航點都有一個地址的兩個航點記錄)。我認爲這是因爲我的控制器正在告訴窗體在每次有新航點時建立一個航點Newsavedmap,但它完全忽略了數據。有任何想法嗎? – KDP
關於DB中的空記錄:你是對的。在'create'方法中,你從params初始化一個新的'@ newsavedmap',然後建立一個新的'waypoints'並保存@newsavedmap - 這保存@newsavedmap和建立的航點。刪除此建築物的方法創建 – gotva