私のサイトには、ユーザーが招待を承諾または拒否することで招待に応答できるページがあります。
彼らの応答はブール値の「受諾」としてデータベースに保存され、クラス「selected」または「not_selected」(選択するとテキストがオレンジ色になります) を「出席」div または「出席しない」div に適用するために使用されます。
<% @going, @not_going = invite.accepted ? ['selected','not_selected'] : ['not_selected','selected'] %>
<%= link_to(outing_invite_accept_path( { :outing_id => invite.outing_id, :invite_id => invite.user_id } )) do %>
<div class="attending_div <%= @going %>">
attending
</div>
<%end %>
<%= link_to(outing_invite_decline_path( { :outing_id => invite.outing_id, :invite_id => invite.user_id } )) do %>
<div class="attending_div <%= @not_going %>">
not attending</div>
</div>
<% end %>
いずれかの div をクリックすると、適切なコントローラー アクションに転送されます。
def invite_accept
@outing = Outing.find(params[:outing_id])
@invite = OutingGuest.find_by_outing_id_and_user_id(params[:outing_id], params[:invite_id])
@invite.update_attribute(:accepted, true)
redirect_to({:action => "index"})
end
def invite_decline
@outing = Outing.find(params[:outing_id])
@invite = OutingGuest.find_by_outing_id_and_user_id(params[:outing_id], params[:invite_id])
@invite.update_attribute(:accepted, false)
redirect_to({:action => "index"})
end
そして今のところ、このコードは問題なく動作します。ただし、有効にするには、インデックス ページを更新する必要があります。
適切な div のリスナーにアタッチされた jQuery ajax 呼び出しを使用して、更新せずにページを更新できることはわかっていますが、そのような呼び出しがどのように見えるか、どこから始めればよいかはわかりません...