Newbie Confusion re underscores / camel case

Hi,

I'm a Java and ColdFusion developer trying to find my feet with JRuby and Rails.

I've created a very simple "Auction" app, with a database schema like this:

  create_table "auction_items", :force => true do |t|     t.string "description"     t.string "title"     t.datetime "start_date"     t.datetime "end_date"     t.datetime "created_at"     t.datetime "updated_at"   end

  create_table "bids", :force => true do |t|     t.integer "auction_item_id"     t.decimal "amount", :precision => 15, :scale => 2     t.datetime "bid_time"     t.datetime "created_at"     t.datetime "updated_at"   end

There are two classes in my model:

auction_item.rb:

class AuctionItem < ActiveRecord::Base   has_many :bids end

bid.rb:

class Bid < ActiveRecord::Base   belongs_to :auction_item end

Initially, I had bid.rb like this:

class Bid < ActiveRecord::Base   belongs_to :AuctionItem end

(ie. using the camel-cased class name, as per the definintion in the class rather than the underscored one), but it didn't work until I changed it to use the undscored one.

What is the rule here? Does the name in the "belongs_to" refer to the table name or something?

Similarly, I'm a bit confused why I have to go to

http://localhost:8080/auction_items (not http://localhost:8080/AuctionItems).

Can anyone explain the general rules to me, or point me to somewhere that does please?

Many thanks, Andrew.

Hi

   The first parameter to belongs_to is the association id So here auction_item_id being the foreign key according to convension by rails we can say

belongs_to :auction_item

   It will be taken as auction_item_id For example you can try

t.belongs_to :auction_item      instead of t.integer "auction_item_id" in the above migration     Defintion of belongs_to you can see at

rails/activerecord/lib/active_record/associations.rb, line 1001

Sijo

Andrew Myers wrote: [...]

Can anyone explain the general rules to me, or point me to somewhere that does please?

Standard Ruby convention (should be explained, at least in part, in the Pickaxe Book). Class names (like all constants) are uppercase. Everything else is lowercase. Unless you are using a literal class name (e.g. AuctionItem.find), you probably want lowercase.

The situation with has_many is a little odd, since the symbol isn't directly *anything*: for example, in has_many :auction_items, notice that the name is plural. This is Rails trying to do friendly English-like syntax.

Many thanks, Andrew.

Best,

Andrew Myers wrote:

Can anyone explain the general rules to me, or point me to somewhere that does please?

Many thanks, Andrew.

take a look at: ActiveSupport::CoreExtensions::String::Inflections

best way is to load it up in irb and play with it's methods or look it up on the rails api.. it will end all your confusion guaranteed.