Attributes in classes db/migrate or app/models

Hello,

I’ve got some experience in Java, and recently, I’ve begun to practice
with Rails.

One of the things that has surprised to me, after I’ve read some books,
it’s that classes hasn’t got attributes; the attributes are in the files
db/migrate/. After that, the ORM makes the mapping with de Database.
But the attributes aren’t in the files app/models/
.

It’s difficult to me see the class without attributes; in Java is
different. Is there anything bad in this idea?

On Sat, Jul 21, 2012 at 3:54 AM, Cortomix aa [email protected]
wrote:

One of the things that has surprised to me, after I’ve read some books,
it’s that classes hasn’t got attributes; the attributes are in the files
db/migrate/. After that, the ORM makes the mapping with de Database.
But the attributes aren’t in the files app/models/
.

Not all classes in a Rails app inherit from ActiveRecord::Base :slight_smile:
And you can have attributes that come from mixed-in modules. It’s
not all about an ORM mapping.

It’s difficult to me see the class without attributes; in Java is
different. Is there anything bad in this idea?

Sorry, I’m not sure what you’re asking.


Hassan S. ------------------------ [email protected]

twitter: @hassan

Thank you for your answer Hassan,

I explain my problem. If I’ve got a Person class in my model, with
Rails I will have a class CreatePersons (for example) in db/migrate/
with its attributes (name, address, telephone…)

class CreatePersons< ActiveRecord::Migration
def change
create_table :persons do |t|
t.string :name
t.string :address

  t.timestamps
end

end
end

And I’ll have the class Person in app/models, but in this class, I
mustn’t put the attributes name, address…

class Persona < ActiveRecord::Base
end

If I work with the Person class, I will have a class without attributes
name or address!!

Is it right what I’ve told? Or, haven’t I understood de idea in Rails?

Thanks!

On Sat, Jul 21, 2012 at 8:20 AM, Cortomix aa [email protected]
wrote:

I explain my problem. If I’ve got a Person class in my model, with
Rails I will have a class CreatePersons (for example) in db/migrate/
with its attributes (name, address, telephone…)

Which is only used to create the database table, and which may be
overridden by later migrations. Once used, it’s meaningless, other
than documenting the history of development.

class Persona < ActiveRecord::Base
end

If I work with the Person class, I will have a class without attributes
name or address!!

The class has those attributes; what makes you think it doesn’t? It
just isn’t necessary for them to be written in the file that defines the
class for them to exist; ActiveRecord derives them from the schema
of the database.

Open up a console session and play with it.

person = Person.new
person.name= “Bob”
person.name
=> “Bob”

Create a non-AR class and experiment with it. Learning through
interactive exploring is one of the advantages of Ruby over Java :slight_smile:


Hassan S. ------------------------ [email protected]

twitter: @hassan