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.