Mapping a model to a table to some records of the table

I have a users table and a Users model there Employee model which derives from the User model. Employee model should only work on the records in user table which have role_id =1. What is the solution. Regards, Pankaj

pankaj wrote:

I have a users table and a Users model there Employee model which derives from the User model. Employee model should only work on the records in user table which have role_id =1. What is the solution. Regards, Pankaj

I'm not sure if you can do exactly what you want. However, you can set up associations that are conditional in this way. So, for example, if you have 'companies' and companies have employees, then you can set up this association in Company.rb

has_many :employees,   :class_name => "User",   :conditions => ["role_id = 1"]

This requires all of the users to have a company_id, and of course for you to have a Company model, with at least one instance for them to reference in their company_id.

Now, you can get the users who are employees by saying

@company.employees

If you don't have a company model, then i assume that all of your users work for the same company. In which case, i'd recommend creating a Company class with a single entry corresponding to your company: after all, it doesn't make much sense to have an Employee model without anything to employ them.

Hope this helps

If I understand what you're saying, User is a superclass of Employee (so every Employee is a User, but not every User is not necessarily an Employee). For that type of solution you should look into Single Table Inheritance. Rather than use role_id, you simple use 'type'. The column will track whether the record represents a User (type=nil) or an Employee (type='Employee').

Take a look at the ActiveRecord::Base documentation under the 'Single Table Inheritance' entry: