Rails base model

I’m very new to Ruby and to Rails. I’m coming from PHP and CakePHP.

I would like to create a base model from which all other models will
inherit from.

I have done this:

class AppModel < ActiveRecord::Base
end

and

class Post < AppModel
end

I’m getting the following error:

Table ‘blog_development.app_models’ doesn’t exist

My question is, how do I tell Rails not to look for a table named
“app_models” AND am I even taking the right approach here? Is there a
better way to do this?

Hi Daniel,

Go through this link
http://stackoverflow.com/questions/937429/activerecordbase-without-table-rails

Where in, answers section you can find an example related to your
approach.


Regards,

T.Veerasundaravel.
http://tinyurl.com/25vma7h
@veerasundaravel

DanielMedia wrote:

I’m very new to Ruby and to Rails. I’m coming from PHP and CakePHP.

I would like to create a base model from which all other models will
inherit from.

I have done this:

class AppModel < ActiveRecord::Base
end

and

class Post < AppModel
end

I’m getting the following error:

Table ‘blog_development.app_models’ doesn’t exist

My question is, how do I tell Rails not to look for a table named
“app_models” AND am I even taking the right approach here? Is there a
better way to do this?

Hi there,

On Thu, 2010-09-16 at 18:12 -0700, DanielMedia wrote:

and
better way to do this?
Short answer: Use set_table_name
http://api.rubyonrails.org/classes/ActiveRecord/Base.html#method-c-set_table_name
in Post. [Though I haven’t tried this and there may be further
complications.]

Long answer: You’re almost certainly doing the wrong thing. If you want
to share code between non-similar models, don’t do it using inheritance.
Create a module which encapsulates the functionality (people tend to put
such stuff in the lib/ directory), and include the module in the models
instead.

If it might be useful for several different projects, you could put your
module in a plugin, and then have the module automatically include
itself in ActiveRecord::Base (therefore making its behaviour available
to all models).

Hope that helps,

Jon


http://jonathanleighton.com/

sorry to say, but your short answer is wrong.

class AppModel < ActiveRecord::Base
end

Table ‘blog_development.app_models’ doesn’t exist

My question is, how do I tell Rails not to look for a table named
“app_models” AND am I even taking the right approach here? Is there a
better way to do this?

Short answer: Use set_table_name
http://api.rubyonrails.org/classes/ActiveRecord/Base.html#method-c-se... in Post.

the right (short) answer is:

class AppModel < ActiveRecord::Base

define as abstract.

self.abstract_class = true
end

I would like to create a base model from which all other models will inherit from.
with that approach this is exactly what your getting. however, you
don’t tell much about your goals. so it’s hard to tell, whether this
is the right thing to do.

Thanks for the help everyone. I really just wanted to have a base
model and have the option of overriding methods for all models or
adding functionality etc. I will try Fred and MaD’s approach and see
how that goes. I also realized that my initial idea to define a
to_slug method in the AppModel is probably wrong and should probably
go within a module instead.

On Sep 17, 2:12 am, DanielMedia [email protected] wrote:

I’m getting the following error:

Table ‘blog_development.app_models’ doesn’t exist

My question is, how do I tell Rails not to look for a table named
“app_models” AND am I even taking the right approach here? Is there a
better way to do this?

You can set self.abstract_class = true on AppModel to tell rails that
AppModel is an abstract class with no underlying table.

Fred

DanielMedia wrote:

Thanks for the help everyone. I really just wanted to have a base
model and have the option of overriding methods for all models or
adding functionality etc. I will try Fred and MaD’s approach and see
how that goes. I also realized that my initial idea to define a
to_slug method in the AppModel is probably wrong and should probably
go within a module instead.

Yes, if you even need it. to_param works wonders.

Best,

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

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs