Ruby on Rails Wednesday, April 29, 2015

I have two models each with their own resources: Organizations and Members. An organization has multiple members and a member is only a member to one organization.

How can I create a simple nested form that signs up a new organization as well as one member for that organization?

My current attempt is below. On submitting the form, this however generates the error message

unknown attribute 'org_name' for Member
, which I don't get especially since org_name is a column within the Organization model and not the Member model.

Organization model

has_many :members, dependent: :destroy
accepts_nested_attributes_for
:members, :reject_if => :all_blank, :allow_destroy => true


Member model

belongs_to :organization


Organizations controller

def new
 
@organization = Organization.new
 
@member = @organization.members.build
end

def create
 
@organization = Organization.new(organizationnew_params)
 
@member = @organization.members.build(organizationnew_params)
 
if @organization.save && @member.save
   
@member.send_activation_email  #Will Rails be able to get to this method? The send_activation_email method exists in multiple models and Rails should here use the version from the Member model.
    flash
[:success] = "Please check your email to activate your account."
    redirect_to root_url
 
else
    render
'new'
 
end
end

def organizationnew_params
 
params.require(:organization).permit(:org_name,
                                       
:phone,
                   member_attributes
: [:email,
                                       
:username,
                                       
:admin,
                                       
:password,
                                       
:password_confirmation
                                       
])
end


Organizations new view

<%= form_for(@organization) do |f| %>
 
<%= f.text_field :org_name, %>
 
<%= f.text_field :phone %>
 
 
<%= f.fields_for :member do |p| %>
   
<%= p.text_field :username %>
   
<%= p.email_field :email %>
   
<%= p.password_field :password %>
   
<%= p.password_field :password_confirmation %>
   
<%= hidden_field_tag :admin, true %>
 
<% end %>

 
<%= f.submit "Sign up", class: "formbutton btn btn-default" %>
<% end %>

What am I doing wrong? How can I create a simple nested form?

--
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-talk+unsubscribe@googlegroups.com.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/dfce3d36-1d79-48dc-b4be-1911ae41e4da%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

No comments:

Post a Comment