Skip to content

Instantly share code, notes, and snippets.

@handofthecode
Forked from mebezac/application.html.erb
Last active March 27, 2022 10:55
Show Gist options
  • Save handofthecode/f3cd43c77c826a5f8d4071969a2c9708 to your computer and use it in GitHub Desktop.
Save handofthecode/f3cd43c77c826a5f8d4071969a2c9708 to your computer and use it in GitHub Desktop.
Rails Ajax Flash Messages
<div id="main" role="main">
<div class="container">
<div class="row">
<div class="span12" id="top-div"> <!--! added "top-div" id to help with ajax -->
<%= render 'layouts/messages' %>
<%= yield %>
</div>
</div>
<footer>
</footer>
</div> <!--! end of .container -->
</div> <!--! end of #main -->
def ajax_flash(div_id)
response = ""
flash_div = ""
flash.each do |name, msg|
if msg.is_a?(String)
flash_div = "<div class=\"alert alert-#{name == :notice ? 'success' : 'error'} ajax_flash\"><a class=\"close\" data-dismiss=\"alert\">&#215;</a> <div id=\"flash_#{name == :notice ? 'notice' : 'error'}\">#{h(msg)}</div> </div>"
end
end
response = "$('.alert').remove();$('#{div_id}').prepend('#{flash_div}');"
response.html_safe
end
def vote
vote = Vote.create(voteable: @post, creator: current_user, vote: params[:vote])
respond_to do |format|
format.html do
if vote.valid?
flash[:notice] = "Your vote was counted"
else
flash[:error] = "You can not vote on \"#{@post.title}\" more than once."
end
redirect_to :back
end
format.js do
if vote.valid?
flash.now[:notice] = "Your vote was counted"
else
flash.now[:error] = "You can't vote on that more than once"
end
end
end
end
$("#post_<%= @post.id %>_votes").html("<%= @post.total_votes %>");
<%= ajax_flash('#top-div') %>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment