使用しているjavascriptライブラリについては言及していません。このソリューションはjqueryベースです。たった1つのアクションでやりたいことがとても簡単にできますdestroy
。しかし、私はそれについて行くために別のテクニックを提案するでしょう。rjsはかなり制約があります。jqueryタコナイトプラグインを探してください。そのすべてのマークアップではなく...目にはあまり魅力的ではないerbと混合されたJavaScriptの束!
だから今あなたの代わりにあなたdestroy.rjs
は持っているでしょうdestroy.xml.erb
。あなたがそれに入れる必要があるものに入る前に、あなたがあなたのdestroy
行動のためにどんな修正をする必要があるか見てみましょう。
前:
def destroy
@model = Model.find(params[:id])
@model.destroy
respond_to do |format|
format.html { redirect_to :action => :index }
format.xml
end
end
後:
def destroy
@model = Model.find(params[:id])
@model.destroy
@template = params[:template]
respond_to do |format|
format.html { redirect_to :action => :index }
format.xml
end
end
単純化するために、routes.rbに名前付きルートを追加します。
map.destroy_using_template 'destroy/:id/:template', :controller => "controller", :action => "destroy"
あなたの見解では:
jquerytaconiteプラグインをのヘッダーに追加します<layout>.html.erb
。
<%= javascript_include_tag "jquery.js", "jquery.taconite.js" %>
テンプレート1のビュー:
リンクを使用して削除するとします。
<%= link_to "Delete", destroy_using_template_path(:id => "1", :template => "temp1"), :method => :delete, :confirm => "Are you sure you want to delete the record?" %>
テンプレート2についても同じです。
リンクを使用して削除するとします。
<%= link_to "Delete", destroy_using_template_path(:id => "1", :template => "temp2"), :method => :delete, :confirm => "Are you sure you want to delete the record?" %>
今あなたのdestroy.xml.erb
<taconite>
<% if @template=="temp1" %>
<remove select="#template1" />
<% elsif @template=="temp2" %>
<remove select="#template2" />
<% end %>
<eval>
//OPTIONAL: Execute some javascript here if you want. You can do most of the DOM modifications using taconite itself.
alert("HEY!!!");
</eval>
</taconite>
今は簡単じゃないですか?:)
タコナイトを使用するときは、destroy.xml.erbのコードがXMLに準拠していることを確認する必要があることを忘れないでください。開いているタグは必ず閉じてください。タコナイトの詳細については、http://malsup.com/jquery/taconite/をご覧ください。
Taconiteは、すべての通常のjquery DOM修飾子をマークアップに実装し、いくつかの独自の修飾子を追加します。javascriptに切り替えたい場合は、eval
上記のようにタグにそのjavascriptを含めるだけで簡単に切り替えることができます。