Thanks Jason,
     The first option sounds like it would be the most consistent with
Rails so I'll read up on accepts_nested_attributes_for and try to make
that work.
               Barney


On Jul 14, 5:15 pm, Jason Fleetwood-Boldt <[email protected]>
wrote:
> It's a common problem and there's isn't one answer.
>
> I'll give you three:
>
> 1) If the objects have relationships to eachother, specify 
> accepts_nested_attribtues_for in your models and then let active record do 
> its thing (what you described in your post works only if you do 
> accepts_nested_attribtues_for in your models). If class Apple has_one :orange 
> and also accepts_nested_attributes_for :orange, you can have fields on your 
> form like this:
>
> text_field_tag "apple[orange][skin]", "peeled"
>
> 2) Hack together a single form that contains parameters from two different 
> objects. On the controller, you'll get params[:apple] and params[:orange]
>
> You can't use form_for as a resource oriented form_for, but you can use 
> form_for and just give the fields custom names that are scoped to the objects 
> you want to scope
>
> text_field_tag "apple[variety]", "golden delicious"
> text_field_tag "orange[skin]", "peeled"
>
> In your controller, you would do something like this
>
> @apple.update_attributes(params[:apple])
> @orange.update_attributes(params[:orange])
>
> That's a little hacky, to be frank. If you were doing this with two distinct 
> objects I might do a quick hack like that, but it's not scalable.
>
> 3) Take the example of a Registration process. Let's say you want to register 
> a camper for summer camp (nice July-appropriate example). One thing you can 
> do is create a Registration object that synthesizes all the other things 
> together. If your Registration object itself has database records, you can 
> use something like strategy #1 above. But, keep in mind that your 
> Registration object doesn't have to be ActiveRecord (or have database 
> records) at all. Experiment with (or just think about) making a Ruby model 
> object that has no active record component.
>
> In that paradigm, the Ruby model object (that does not inherit from active 
> record and also does not have database records), represents the transaction. 
> You won't keep it around after the controller it done (because it will be 
> gone from memory after the execute is done). But you can instantiate it, work 
> with it, write business logic on it, pass it messages (call methods) and let 
> it update other objects in your system.
>
> That would be a more globalized strategy if say, you wanted to submit one 
> form and have it touch 5 different objects.
>
> -Jason
>
> On Jul 14, 2011, at 4:47 PM, Barney wrote:
>
> > On p. 299 of the current Rails book it says that "Active Record takes
> > care of saving all the dependent child rows when you save a parent
> > row."  So, when I add a row to the table that has "belongs_to" in its
> > model, shouldn't the table with the "has_many" be updated with data
> > from the foreign key?  If not, how do I save data from a form into
> > more than one table? (And, maybe unfairly expanding into a second
> > question, how could I put fields from multiple tables on a web page so
> > that when it is filled out the values will go into various tables?)
> > In both of these forms of questions I'm trying to get an answer to how
> > data that will go into multiple tables can come from one web page.  I
> > hope my statement of the problem isn't too confusing.
> >        Thanks,
> >            Barney
>
> > --
> > 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 [email protected].
> > To unsubscribe from this group, send email to 
> > [email protected].
> > 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 [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.

Reply via email to