Colin, I figured out most of it. But stayed stuck on a detail.
My app now has Account, User, and Role models. The Role model links the
Account and User models. User has_many roles, and has_many accounts through
roles. User accepts_nested_properties for accounts.
Everything works except for setting an extra attribute on the Role model.
The Role model has a role_type column that I want to set when the records
are created. It keeps showing up blank though.
Basically, when the User and the Account objects are created, I want the
Role model that joins them to have "owner" in the role_type column. But
it's showing up blank. I feel like I am mixing up "ownership" with "roles",
yet it seems natural to store the in the same table. I thought I could use
inheritance to simplify it, but it's causing more headaches. I can't change
the type column arbitrarily if I wanted to change the role of a use for
example.
My questions are: How do I set the role_type column? And is it stupid? It
doesn't seem like a good way to set up something meant to be secure in such
a way.
Should I use inheritance instead and create separate associations for each
role type?
Models:
class User < ActiveRecord::Base
attr_accessible :name, :email, :password, :password_confirmation,
:accounts, :accounts_attributes
has_many :roles
has_many :accounts, through: :roles
accepts_nested_attributes_for :accounts
end
class Account < ActiveRecord::Base
attr_accessible :title
has_many :roles
has_many :users, through: "roles"
end
class Role < ActiveRecord::Base
attr_accessible :account_id, :user_id, :role_type
belongs_to :account
belongs_to :user
end
Controller:
def new
@user = User.new
@role = @user.roles.build(role_type: "owner")
@account = @user.accounts.build
end
def create
@user = User.new(params[:user])
if @user.save
redirect_to root_path
else
render 'new'
end
end
View
<%= simple_form_for @user do |f| %>
<%= f.simple_fields_for :accounts do |account_form| %>
<%= account_form.input :title %>
<% end %>
<%= f.input :name %>
[snip]
<%= f.submit 'Sign up', class: 'btn btn-primary' %>
<% end %>
On Tuesday, March 6, 2012 12:39:46 PM UTC-3, Colin Law wrote:
>
> On 4 March 2012 17:25, Mohamad El-Husseini <[email protected]> wrote:
> > I'm a bit unsure how to model a relationship in ActiveRecord. It's a
> "has many through" with nested attributes. I already asked on SO but no
> luck so far. I would appreciate it if you could have a look and point me in
> the right direction. Feel to answer here or there! The question is here:
> http://stackoverflow.com/questions/9555888/what-active-record-association-do-i-use-in-this-scenario
> >
> > I won't repeat myself, as the question does a good job of explaining,
> but I want to create users through accounts, and model the relationship
> through a relationship table.
>
> Better to repeat the question here. I cannot answer the questions
> without quoting it here which would mean I would have to copy bits
> from the link and paste them in here, which is too much effort. Also
> many will not be bothered to take the time to go and look somewhere
> else for your question.
>
> 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/-/GOwMyhziDSYJ.
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.