1 0 Archive | programming RSS feed for this section
post icon

Completely remove a file or directory from all revisions in a git repository

I’ve accidentally added files and directories into my git repository before and forgot that I did. Then a few days later was swearing and cursing. After a pile of google searching I’ve found a couple resolutions for these problems that have and are working perfect for me.

First I take no responsibility for your actions on performing these commands. I’m not positive if you can undo these changes. You will want to maybe back up your files before trying these out.

Remove Directories

git filter-branch --tree-filter 'rm -rf vendor/plugins/someshitplugin' HEAD

Remove Files

git filter-branch -f --index-filter 'git update-index --remove public/index.html' HEAD

Then after either of those run these two commands:

git push --force --verbose --dry-run
git push --force
Leave a Comment
post icon

Better alias for Ruby on Rails script/server and TextMate mate app

Just the other day I was browsing through some railscasts from Ryan Bates and noticed he was starting his server with “ss”. It made me pissed that I hadn’t thought of doing that before, I guess because I was so comfortable cd ~/Sites/appname and script/server. So I first wrote some aliases like Ryan’s “ss”, but then thought huh, this could be better… Google to the rescue and I found this code for script/server and then that inspired me to write this code for mate appname. Pretty quick to open and boot apps!

Leave a Comment
post icon

Display different styles for flash messages in Ruby on Rails

I saw this in a Rails video on Bala Paranj’s website http://rubyplus.org and thought is was a pretty cool way to display different flash messages throughout your app.

<% flash.each do |key, value| -%>
  <div id="notice_<%= key %>"><%= value %></div>
 <% end -%>

Then you can do different flash objects like this:

flash[:success] = "message here"
flash[:error] = "message here"

Then just style the messages with some css and you’ve got a notice div displaying error and success messages with less effort!

Leave a Comment
post icon

Floasis Hair Salon website launched

I just launched my girlfriends hair salon website Floasis Hair Salon. Looks preeetty good so far even in all browsers. It’s a Ruby on Rails site of course. Nothing too crazy, just a simple interface that is easy to find what your looking for. How all sites should be.

Leave a Comment
post icon

Handling Validation Errors using Ajax Requests in Rails

After spending about 6 hours reserching how to handle errors when using ajax requests to create, update and do other actions in Ruby on Rails I got fed up and started doing it on my own, with a little help from Agile Web Development with Rails.

I spent countless hours looking through google and found nothing I liked, and this is why I’m writing this post. I also found nothing that showed all the code, from view to controller to js. So I’ll try and include everything here.

First background on what I wanted to do… I have an index.html.erb file that loops through an object that contains a bunch of stuff. What I wanted was:

  1. Have a form_remote_for at the bottom of this list that would do an Ajax.Request
  2. Have the new form values save to the database
  3. Print the new data to the bottom of the current list
  4. And handle any errors so the user would know wtf was going on

Ryan Bates has a sweet railscast screencast showing how to implement… well everything except the error handling. I’m just going to make it really simple just so you get an idea.

My index.html.erb file:

<table id="teams">
 <tr>
  <th>Team name</th>
  <% if logged_in? -%>
   <th>Action</th>
  <% end -%>
  </tr>
  <% for @team in @teams -%>
   <tr>
    <td><%= link_to @team.name, league_team_path(@league.id, @team.id) %></td>
    <% if logged_in? -%>
     <td>
      <%= link_to_remote image_tag('file_remove.png'), :url => team_path(@team.id), :method => :delete, :confirm => "Are you sure?" %>
      <%= link_to image_tag('file_edit.png'), edit_team_path(@team.id) %>
     </td>
    <% end -%>
   </tr>
  <% end -%>
</table>
<% if logged_in? -%>
 <div class="ajax_form">
  <% form_remote_for :team, :url => teams_path do |f| -%>
   <p id="team_name_para">
    <label id="team_name_label" for="team_name">Team name:</label>
    <%= f.text_field :name, :class => "large_set_width", :value => "" %>
    <button class="form_submit" type="submit"><span>Save</span></button>
   </p>
  <% end -%>
 </div>
<% end -%>

This is pretty basic, I just loop through all teams and print them out into a table with admin actions to edit and delete. Then the form_remote_for at the bottom that sends an Ajax.Request

My teams_controller.rb create action:

def create
 @team = @league.teams.build(params[:team])
 if @team.save
  respond_to do |format|
   flash[:notice] = @team.name + ' was successfully created.'
   format.html { redirect_to teams_path(@team) }
   format.js {
    render :update do |page|
     page.insert_html :bottom, :teams, :partial => "partials/assets/team", :object => @team
     page.replace_html :notice, "<p>"+flash[:notice]+"</p>"
     page.show 'notice'
     page.visual_effect :highlight, 'notice'
    end
   }
  end
 else
  respond_to do |format|
   format.html { render :action => "new" }
   format.js {
    render :update do |page|
     page.visual_effect :shake, "team_name_para"
     page.replace_html :team_name_label, @team.errors.full_messages
     page << "$('team_name_para').addClassName('form_error_message');"
    end
   }
  end
 end
end

This is pretty basic as well, we have the usual if @team.save and the html format in the respond to. What you want to look at is the format.js block. Instead of rendering a rjs file, were just going to take care of everything right in the controller. The first page.insert_html inserts the content from the team partial that gets the @team object passed to it. Partial looks like this:

<tr>
 <td><%= link_to @team.name, team_path(@team.id) %></td>
 <% if logged_in? -%>
  <td>
   <%= link_to_remote image_tag('file_remove.png'), :url => team_path(@team.id), :method => :delete, :confirm => "Are you sure?" %>
   <%= link_to image_tag('file_edit.png'), edit_league_team_path(@league.id, @team.id) %>
  </td>
 <% end -%>
</tr>

So basically that just renders to the bottom of the table… Then the next 3 just handle the flash[:notice]. I put in some scriptaculous goodness as well. One issue I had was the flash[:notice]. In my application.html.erb layout I had:

<% if flash[:notice] -%>
 <div id="notice">
  <%= flash[:notice] %>
 </div>
<% end -%>

But this wasn’t going to work with the page.replace_html :notice because the div didn’t exist yet until the flash was created. So I switch things up and applied css to the paragraph tag instead of the div:

<div id="notice">                       
 <% if flash[:notice] -%>
  <p><%= flash[:notice] %></p>
 <% end -%>
</div>

Now for the fun part… err umm not so fun error handling. You’ll notice that the if @team.save has an else like usual. So we can do format.js like above. First if there were errors I would shake the entire paragraph tag that contains the label, input and button. This is some more scriptaculous goodness and really tells the user there’s something wrong. Next because we are only working with one input we can replace the html inside the label with @team.error.full_messages and add a class name so we can turn it red so they know there’s an error on that field.

That’s it!! Pretty simple stuff. Also if you have something more complex with multiple input and fields we can handle the errors a bit differently. First you can put an empty div on your page somewhere:

<div id="ajax_form_errors"></div>

Then in the else statement just add this into the format.js block:

page.replace_html :ajax_games_form_errors, :partial => "partials/assets/errors"

Then the errors.html.erb partial:

<div id="errorExplanation" class="errorExplanation">
 <h2><%= @game.errors.count %> errors prohibited this game from being saved</h2>
 <p>There were problems with the following fields:</p>
 <ul>
  <% @game.errors.each_full do |msg| -%>
   <li><%= msg %></li>
  <% end -%>
 </ul>
</div>

What were doing here is basically just the same thing ActiveRecord::Errors does with it default setup for error handling. Looping over the errors and printing them out in a list item.

That’s it that’s all. Lemme know if you have any problems and I’ll try and help you out the best I can.

Leave a Comment