Refactor to Helpers
This Rails partial is almost all template escapes. Put it into a helper, and refactor each case to methods so we can build out the controls for each. (I've converted to tabs - fighting with Vimgolf's default config shouldn't be part of the challenge.)
Start file
## _controls.html.erb <div class='controls'> <% if event.author == current_user -%> <%= link_to "Edit Activity", edit_event_path(event), :class => 'button' %> <% else -%> <% if current_user.attending? event -%> <%= link_to "Leave", leave_event_path(event), :class => "button neg", :method => :post %> <% else -%> <% if current_user.invited_to? event -%> <%= link_to "Accept Invite", join_event_path(event), :class => "button pos", :method => :post %> <% else -%> <%= link_to "I'm Going", join_event_path(event), :class => "button pos", :method => :post %> <% end -%> <% end -%> <% end -%> </div> ## event_helper.rb module EventHelper end
End file
## _controls.html.erb <div class='controls'> <%= event_controls event %> </div> ## event_helper.rb module EventHelper def event_controls(event) if event.author == current_user author_controls(event) elsif current_user.attending? event attendee_controls(event) elsif current_user.invited_to? event invitee_controls(event) else public_controls(event) end end def author_controls(event) link_to "Edit Activity", edit_event_path(event), :class => 'button' end def attendee_controls(event) link_to "Leave", leave_event_path(event), :class => "button neg", :method => :post end def invitee_controls(event) link_to "Accept Invite", join_event_path(event), :class => "button pos", :method => :post end def public_controls(event) link_to "I'm Going", join_event_path(event), :class => "button pos", :method => :post end end
View Diff
3,15c3 < <% if event.author == current_user -%> < <%= link_to "Edit Activity", edit_event_path(event), :class => 'button' %> < <% else -%> < <% if current_user.attending? event -%> < <%= link_to "Leave", leave_event_path(event), :class => "button neg", :method => :post %> < <% else -%> < <% if current_user.invited_to? event -%> < <%= link_to "Accept Invite", join_event_path(event), :class => "button pos", :method => :post %> < <% else -%> < <%= link_to "I'm Going", join_event_path(event), :class => "button pos", :method => :post %> < <% end -%> < <% end -%> < <% end -%> --- > <%= event_controls event %> 19a8,34 > def event_controls(event) > if event.author == current_user > author_controls(event) > elsif current_user.attending? event > attendee_controls(event) > elsif current_user.invited_to? event > invitee_controls(event) > else > public_controls(event) > end > end > > def author_controls(event) > link_to "Edit Activity", edit_event_path(event), :class => 'button' > end > > def attendee_controls(event) > link_to "Leave", leave_event_path(event), :class => "button neg", :method => :post > end > > def invitee_controls(event) > link_to "Accept Invite", join_event_path(event), :class => "button pos", :method => :post > end > > def public_controls(event) > link_to "I'm Going", join_event_path(event), :class => "button pos", :method => :post > end
Solutions by @vsakarov:
Unlock 1 remaining solutions by signing in and submitting your own entry