i like this olution because roles can grow easily

On Sat, Sep 11, 2010 at 11:29 PM, radhames brito <[email protected]> wrote:

> script/generate migration add_roles_mask_to_users roles_mask:integer
> rake db:migrate
>
>
> # in models/user.rb
>
> ROLES = %w[Manager Worker]
>
> def roles=(roles)
>   self.roles_mask = (roles & ROLES).map { |r| 2**ROLES.index(r) }.sum
> end
>
> def roles
>   ROLES.reject do |r|
>
>     ((roles_mask || 0) & 2**ROLES.index(r)).zero?
>
>   end
> end
>
>
> def is?(role)
>   roles.include?(role.to_s)
> end
>
>
> Or install the gem that does this http://rubygems.org/gems/role_model
>
>
>
>
>
>
> On Sat, Sep 11, 2010 at 11:07 PM, Daniel Gaytán <
> [email protected]> wrote:
>
>> I forgot to mention that you must to define a default scope for getting
>> first all Managers or Workers in each case and a before create filter to set
>> the role the person you are creating will have or whatever:
>>
>> #manager.rb
>>
>> before_create :set_manager_role
>>
>> default_scope :where => {:role => "manager"}
>>
>> private
>>
>> def set_manager_role
>>   self.role = "manager"
>> end
>>
>> The same for the worker model
>>
>>
>> 2010/9/11 Daniel Gaytán <[email protected]>
>>
>> I think this could work:
>>>
>>> class Task < ActiveRecord::Base
>>>   belongs_to :worker
>>>   belongs_to :manager
>>> end
>>>
>>> class Person < ActiveRecord::Base
>>> end
>>>
>>> class Manager < Person
>>>   has_many :tasks
>>> end
>>>
>>> class Worker < Person
>>>   has_many :tasks
>>> end
>>>
>>> task = Task.create
>>> manager = Manager.create
>>> worker = Worker.create
>>>
>>> task.manager = manager
>>> task.worker = worker
>>>
>>>
>>> You don't need to create two tables, only to files more... extending the
>>> model that is related to the table.
>>>
>>> Daniel Gaytán
>>>
>>> 2010/9/11 Brian Ablaza <[email protected]>
>>>
>>> I have a People table and a Tasks table. Some People are Managers, some
>>>> are Workers. Each Task has a Manager and a Worker.
>>>>
>>>> How do I define the relationships? I tried a STI setup, where Managers
>>>> and Workers inherit from People, and People has a type column. In my
>>>> Task table, I have worker_id and manager_id rows. Then:
>>>>
>>>> task belongs_to worker
>>>> task belongs_to manager
>>>> worker has_many tasks
>>>> manager has_many tasks
>>>>
>>>> But when I ask for task.worker, or task.manager, it throws an error.
>>>>
>>>> How can I do this without separate Worker and Manager tables?
>>>> --
>>>> Posted via http://www.ruby-forum.com/.
>>>>
>>>> --
>>>> You received this message because you are subscribed to the Google
>>>> Groups "Ruby on Rails: Talk" group.
>>>> To post to this group, send email to [email protected].
>>>> To unsubscribe from this group, send email to
>>>> [email protected]<rubyonrails-talk%[email protected]>
>>>> .
>>>> For more options, visit this group at
>>>> http://groups.google.com/group/rubyonrails-talk?hl=en.
>>>>
>>>>
>>>
>>  --
>> You received this message because you are subscribed to the Google Groups
>> "Ruby on Rails: Talk" group.
>> To post to this group, send email to [email protected].
>> To unsubscribe from this group, send email to
>> [email protected]<rubyonrails-talk%[email protected]>
>> .
>> For more options, visit this group at
>> http://groups.google.com/group/rubyonrails-talk?hl=en.
>>
>
>

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en.

Reply via email to