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 M. 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,

Marnen Laibow-Koser
http://www.marnen.org
[email protected]

Andrew M. 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.