[Rails] Re: how to use activemodel collection.build for a has_many :through association
On Sunday, 21 July 2013 13:28:38 UTC-4, James Gray wrote:
Hi all,In my controller I am doing the following to populate a nested form for a has_many through association:def new@specification = Specification.newComponent.find_each.each do |component|@specification.component_specifications.build(: component_id => component.id) end
One note on this: I'm not sure what the find_each is getting you here. If there are enough records to make it important to find them in batches, building a new ComponentSpecification for each is going to be a bad idea.
The idea being whenever someone creates or edits a form, it will be populated with all components at that time so that when they save those components that specification will be associated with the newly created specification. The problem I am having is I can't work out how to pass component name to display in my form for the as yet nonexistent component_specification as it is not accessible through the ComponentSpecification model.My models:class Specification < ActiveRecord::Baseattr_accessible :description, :name, :component_specifications_attributes validates :name, :presence => true, :uniqueness => truehas_many :component_specificationshas_many :components, :through => :component_specificationsaccepts_nested_attributes_for :component_specifications, :allow_destroy => trueendclass ComponentSpecification < ActiveRecord::Baseattr_accessible :note, :colour, :brand, :componentshas_many :components
This doesn't match the code you're using above - setting `component_id` isn't going to load this association. Is it possible this should be a belongs_to :component instead?
class Component < ActiveRecord::Baseattr_accessible :description, :namebelongs_to :component_specifications
Again, I think this is the wrong way round - I'm guessing your intended data model is that one Specification can have many Components, with ComponentSpecifications acting as a join table...
--Matt Jones
-- 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/46d84917-ef35-4ed3-8a4f-e278b71c3f49%40googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
0 Comments:
Post a Comment
Subscribe to Post Comments [Atom]
<< Home