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.
has_many :members, dependent: :destroy accepts_nested_attributes_for :members, :reject_if => :all_blank, :allow_destroy => true **Member model**
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?