On 1 May 2012 22:53, Mohamad El-Husseini <husseini....@gmail.com> wrote:
>> It depends what you mean by 'work'.  It will assign the type of @role
>> to "admin" but the problem is that you have not saved it to the
>> database after changing the type.

You have not responded to the point above

>>  By the way, I advise against using
>> type as an attribute name, that is a reserved attribute name for use
>> with STI.
>
> I did change type to role. I get this rather mysterious error:  Roles en-US,
> activerecord.errors.models.account.attributes.roles.invalid

Come back with more detail on this problem if it still exists.  Post
the full error message and show which line of code it relates to.

Colin

>
> def create
>     @account   = Account.new(params[:account]) # we don't need @user since
> it's in params[:account]
>     @role      = @account.roles.build
>     @role.role = "owner"
> end
>
>> Should that not be self.type (apart from the fact that type is not a
>> good name)?  But if you want a default value for a column why not just
>> set the default in the database?
>
> It should, I made the changes in the middle of typing my question. I can add
> a default value to the db. But I want the be able to set the value depending
> on content: when a user registers with a new account; when an existing user
> adds a moderator to his account, etc...
>
> On Tuesday, May 1, 2012 4:28:31 PM UTC-4, Colin Law wrote:
>>
>> On 1 May 2012 17:05, Mohamad El-Husseini <husseini....@gmail.com> wrote:
>> > I have User, Account, and Role models. The Account model accepts nested
>> > properties for users. This way users can create their account and user
>> > records at the same time.
>> >
>> > class AccountsController < ApplicationController
>> >   def new
>> >     @account = Account.new
>> >     @user = @account.users.build
>> >   end
>> > end
>> >
>> > The above will work, but the user.roles.type defaults to member. At the
>> > time
>> > of registration, I needuser.roles.type to default to admin. This does
>> > not
>> > work:
>> >
>> > class AccountsController < ApplicationController
>> >   def new
>> >     @account = Account.new
>> >     @role = @account.role.build
>> >     # Role.type is protected; assign manually
>> >     @role.type = "admin"
>> >     @user = @account.users.build
>> >   end
>> > end
>>
>> It depends what you mean by 'work'.  It will assign the type of @role
>> to "admin" but the problem is that you have not saved it to the
>> database after changing the type.  By the way, I advise against using
>> type as an attribute name, that is a reserved attribute name for use
>> with STI.
>>
>> > ...
>>
>> > # user_id, account_id, type [admin|moderator|member]
>> > class Role < ActiveRecord::Base
>> >   belongs_to :user
>> >   belongs_to :account
>> >   after_initialize :init
>> >
>> >   ROLES = %w[owner admin moderator member]
>> >
>> >   private
>> >   def init
>> >     self.role = "member" if self.new_record?
>> >   end
>> > end
>>
>> Should that not be self.type (apart from the fact that type is not a
>> good name)?  But if you want a default value for a column why not just
>> set the default in the database?
>>
>> Colin
>
> --
> You received this message because you are subscribed to the Google Groups
> "Ruby on Rails: Talk" group.
> To view this discussion on the web visit
> https://groups.google.com/d/msg/rubyonrails-talk/-/roLxK-sVUhgJ.
>
> To post to this group, send email to rubyonrails-talk@googlegroups.com.
> To unsubscribe from this group, send email to
> rubyonrails-talk+unsubscr...@googlegroups.com.
> 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 rubyonrails-talk@googlegroups.com.
To unsubscribe from this group, send email to 
rubyonrails-talk+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en.

Reply via email to