Re: [Rails] Setting an addional attribute on the join model in a has_many through relationship
> 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.
I did change type to role. I get this rather mysterious error: Roles en-US, activerecord.errors.models.account.attributes.roles.invalid
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.mel@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+unsubscribe@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
0 Comments:
Post a Comment
Subscribe to Post Comments [Atom]
<< Home