Saturday, March 22, 2008

Generating a resource in the routes.rb file

When making a generator, you may want to add something to the routes.rb file. To understand this you need to know how to make generators. Take a look at Ryan Bates' Railscast on how to do this.

To add a normal resource, do it this way:


class GawingFileableGenerator < Rails::Generator::Base
def manifest
record do |m|
...
m.route_resources :files
end
end
end


If you want to add other stuff like :member or :collection, do it this way


class GawingFileableGenerator < Rails::Generator::Base
def manifest
record do |m|
...
route_string = ":files, :member => { :download => :get }"
def route_string.to_sym; to_s; end
def route_string.inspect; to_s; end
m.route_resources route_string
end
end
end

Wednesday, March 12, 2008

acts_as_state_machine: make initial state exists!

Ugh.. I tried out acts_as_state_machine and I kept getting this nil error and I had no idea why. I mean, I followed the code in agilewebdevelopment.com properly. Here's the code in that website:


acts_as_state_machine :initial => :created, :column => 'status'

# These are all of the states for the existing system.
state :submitted
state :processing
state :nonprofit_reviewing
state :accepted


Oh... apparently, you need to add


state :created


to it as well :)

Monday, March 3, 2008

Expected User, got User; forcing to reload plugins

I made my own plugin and started getting this error. This plugin is a variation of the acts_as_voteable plugin by Juixe. I did some searching around, I found this blog post that explains the fix.

Apparently, in development mode, there are issues when it comes to reloading plugins. Because the model "Vote" in my case, or "Comment" in the blog post's case, is defined inside the plugin, Rails doesn't see that it should load it again. Anyway, better to read that post for an explanation.

What I did to fix it was add this code at the end of the environment.rb file:
 # Array of plugins with Application model dependencies.
reloadable_plugins = ["acts_as_commentable"]

# Force these plugins to reload, avoiding stale object references.
reloadable_plugins.each do |plugin_name|
reloadable_path = RAILS_ROOT + "/vendor/plugins/#{plugin_name}/lib"
Dependencies.load_once_paths.delete(reloadable_path)
end
See the code.

Wednesday, February 27, 2008

Creating your own plugin

I finally forced myself to make my own plugin instead of having controllers and models all over the place. Of course, I waited for the right time to make a plugin that wasn't too different, and needed to be different at the same time.

I chose to make another version of acts_as_voteable by Juixe. Here are the steps I took
  1. I watched Ryan Bates' screencast on making plugins
  2. I coped acts_as_voteable and starting editing things one by one to see what broke.
  3. When I needed a clearer and more advanced explanation (like adding helpers and such), I referred to Geoffrey G's howto on creating plugins.
It took me about 4 hours to figure the whole thing out (I'm a slow learner.. and I already knew about polymorphic associations!).

The change I had to make to acts_as_voteable was that I had to have 3 kinds of votes: positive, neutral and negative. Very small change, right? :)

You can get my plugin like this:

script/plugin install http://lucidph.dreamhosters.com/gawing_voteable/trunk

Monday, February 25, 2008

Syntax highlighting

I did a fresh install of Ubuntu on my laptop, and I installed gVim (rails.vim) as well. To my surprise, there was no syntax highlighting! Good thing a quick ":syntax on" fixed that.

Friday, February 8, 2008

Expected "model.rb" to define Model

I was getting this error:

ActionView::TemplateError (Expected /home/lucidph/public_html/rails/pbed/app/models/article_photo.rb to define ArticlePhoto) on line #5 of articles/gen_xml.xml.builder

A lot of people get this with ferret and some bug with it, but I didn't have ferret. The problem: I forgot to upload attachment_fu to the server!

Friday, February 1, 2008

Deploying in Bluehost

I started writing this entry not knowing what is wrong with my app in Bluehost - except that it isn't running. I know this because I get a :

Application error

Rails application failed to start properly

1) First I made sure it had all the gems it needed. Since we wanted to freeze our gems, we had put them in the gem folder.

I added this to our environment.rb

ENV['GEM_PATH'] = '/home/YOUR_USERNAME/.gems:/usr/lib/ruby/gems/1.8'

2) Looking at the production.log, now I see an error. What's the error? Among other stuff, the one that's most readable is "Missing helper file helpers/formatting_helper.rb".

I upload it.

3) It works.