제 목표는 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
에 Params는 새로운 기록을
매개 변수를 만들 때 : { "newsavedmap"=> { "이름"=> "내지도의 이름", 다른 필드는, 위의 "중간 점"을 표시되지 않음 => { "waypointaddress"=> [ "1600 Pennsylvania Ave NW, Washington, DC 20500", "350 5th Ave, New York, NY 10118"]}}
당신이 양식 – gotva
추가에서 오는 PARAMS을 게시 할 수있는 방법이 될 것입니다. 밝혀 졌 듯이 위의 그림은 웨이 포인트 데이터베이스에 하나의 새로운 빈 레코드를 생성하는 것입니다 (두 개의 웨이 포인트 레코드 각각 하나의 주소가 있음). 컨트롤러가 웨이 포인트를 작성할 때마다 Newsavedmap. 그러나 데이터를 완전히 무시하고 있습니다. 어떤 아이디어? – KDP
DB에 빈 레코드에 대한 : 당신 말이 맞아. 'create' 메쏘드에서 params로부터 새로운'@ newsavedmap'을 초기화하고, 새로운 waypoints를 만들고 @newsavedmap을 저장합니다. 이것은 @newsavedmap과 내장 된 중간 점을 저장합니다. 메소드에서 웨이 포인트를 위해이 건물을 제거하십시오. – gotva