Ruby on Rails Tuesday, May 4, 2010

I'm relatively new to Rails myself, though I've been somewhat
successful with nested model associations in both directions.

Models:
class Person < ActiveRecord::Base
belongs_to :address
accepts_nested_attributes_for :address
end

class Address < ActiveRecord::Base
has_many: persons
accepts_nested_attributes_for :persons
end

Controller:
class PersonsController < ApplicationController
def new
@person = Person.new
@person.address = Address.new
end
def create
@person = Person.new params[:person]
if @person.save
redirect_to :show
else
render :new
end
end
end
class AddressesController < ApplicationController
def new
@address = Address.new
1.times { @address.persons.build } # increase 1 to default number of
people at address
end
def create
@address = Address.new params[:address]
if @address.save
redirect_to :show
else
render :new
end
end

Views:
# persons/new.html.erb
<% form_for @person do |person_fields| %>
<% person_fields.fields_for :address do |address_fields| %>
<%= address_fields.label ... %>
<% end %>
<% end %>
# addresses/new.html.erb
<% form_for @address do |address_fields| %>
<% address_fields.fields_for :persons do |person_fields| %>
<%= person_fields.label ... %>
<% end %>
<% end %>

If you get weird errors such as HashWithIndifferentAccess, try
refreshing your browser, so it pulls in a fresh form.

Hope that helps,
Mike

On Apr 29, 5:18 am, Sereno Mendes <li...@ruby-forum.com> wrote:
> Hi all,
>
> I have a relationship in this form: A person belongs to an address and a
> address can have many persons like below:
>
> class Person < ActiveRecord::Base
>   belongs_to :address
> end
>
> class Address < ActiveRecord::Base
>   has_many: persons
> end
>
> The ideia behind this is, if two or more persons share the same address,
> isn't necessary create two indetical rows in the database. But, like i'm
> new in the rails development, i want to create a form for person
> creation and edition that wraps the creation of related address, as anestedform. I already made a search for a solution for this problem,
> but the solutions that i found in others sites are for the inverse
> associations, any idea?
>
> Thanks.
> --
> Posted viahttp://www.ruby-forum.com/.
>
> --
> 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+unsubscribe@googlegroups.com.
> For more options, visit this group athttp://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+unsubscribe@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.

No comments:

Post a Comment