I have a link_to that toggles a boolean field when clicked. The problem is that it toggles when the page is refreshed and/or loaded. Here is the code:
stories/show.html.erb
<div id="story">
<%= render @story %>
</div>
_story.html.erb
<div id="storyShow">
<% if story.user == current_user %>
<%= render 'stories/published', { :story => story } %>
<% end %>
</div>
stories_controller.rb
def toggle_published
@story = Story.find(params[:id])
@story.toggle!(:published)
end
application_helper.rb
def published_link_text(publishable)
publishable.published? ? 'Published' : 'Un-Published'
end
_published.html.erb
<% if story.published? %>
<span id="publishedSwitchGreen" class="greenText">
<%= link_to published_link_text(story),
toggle_published_story_path(story), :remote => true, :id => "story_publish#{story.id}" %>
</span>
<% else %>
<span id="publishedSwitchRed" class="redText">
<%= link_to published_link_text(story),
toggle_published_story_path(story), :remote => true, :id => "story_publish#{story.id}" %>
</span>
<% end %>
toggle_published.js.erb
$("#story_publish<%= @story.id %>").text("<%= published_link_text(@story) %>");
routes.rb
resources :stories do
get 'toggle_published', :on => :member
end
I accidentally pasted my toggle call in the Show action of the controller, so every time the story would show, it would toggle.