Urgghhh - Newbie help needed to stop me giving up on Rails. I have 3 nested models. Recipe->RecipeParts->RecipeIngredients (to the ingredients index so maybe 4 levels) class Recipe < ActiveRecord::Base has_many :recipe_parts accepts_nested_attributes_for :recipe_parts class RecipePart < ActiveRecord::Base belongs_to :recipe has_many :recipe_ingredients has_many :ingredients, :through => :recipe_ingredients accepts_nested_attributes_for :recipe class RecipeIngredient < ActiveRecord::Base belongs_to :recipe_part belongs_to :ingredient I''m trying to write an edit page for Recipe that includes a list of RecipeParts - and within that a list of RecipeIngredients (each as a select list) <h1>Editing recipe</h1> <% form_for(@recipe) do |recipe_form| %> <% recipe_form.fields_for :recipe_parts do |recipe_part_form| %> <% recipe_part_form.fields_for :recipe_ingredients do |rcp_ing| %> <p><%= rcp_ing.collection_select( :name, @ing_list_for_select,:id, :name) %></p> <% end %> <p><%= recipe_part_form.text_field :title %></p> <p><%= recipe_part_form.text_field :description %></p> <% end %> <%= link_to "Add Part", {:controller => "recipes",:action => "add_recipe_part", :id => @recipe.id} %> <%= recipe_form.submit "Update" %> <% end %> <%= link_to ''Show'', @recipe %> | <%= link_to ''Back'', recipes_path %> The multiple RecipeParts list correctly, but within each part I get 1 selection for the ingredients only, despite the data having a mixture of 0-3 ingredients for the various parts. So - my recipe_part_form.fields_for line doesn''t seem to be iterating over the recipe_ingredients properly , and I can''t work out why - I think I''m using the identical structure that I did for the RecipeParts - which works fine. Secondly - the collection_select isn''t giving me a correct Selected item - but this could be due to the first problem perhaps. Sorry if the post is too long/stupid/wrong but Rails/Ruby is proving to be (BY FAR) the hardest and most obtuse environment I''ve tried learning in almost 30 years of programming. After almost 3 months of online tutorials,books, reading forums etc and experimentation I can''t understand just how little I can get working in Rails. Ian -- 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-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
On 20 July 2010 12:29, IanJ <ian_johnston-e+AXbWqSrlAAvxtiuMwx3w@public.gmane.org> wrote:> Urgghhh - Newbie help needed to stop me giving up on Rails. > > I have 3 nested models. > Recipe->RecipeParts->RecipeIngredients (to the ingredients index so > maybe 4 levels) > > class Recipe < ActiveRecord::Base > has_many :recipe_parts > accepts_nested_attributes_for :recipe_parts > > > class RecipePart < ActiveRecord::Base > belongs_to :recipe > has_many :recipe_ingredients > has_many :ingredients, :through => :recipe_ingredients > accepts_nested_attributes_for :recipeIs that what you meant? Should it be accepts_nested_attributes_for :recipe_ingredients? Colin> > > class RecipeIngredient < ActiveRecord::Base > belongs_to :recipe_part > belongs_to :ingredient > > > > I''m trying to write an edit page for Recipe that includes a list of > RecipeParts - and within that a list of RecipeIngredients (each as a > select list) > <h1>Editing recipe</h1> > > <% form_for(@recipe) do |recipe_form| %> > > > <% recipe_form.fields_for :recipe_parts do |recipe_part_form| %> > <% recipe_part_form.fields_for :recipe_ingredients do |rcp_ing| %> > <p><%= rcp_ing.collection_select( :name, > @ing_list_for_select,:id, :name) %></p> > > <% end %> > <p><%= recipe_part_form.text_field :title %></p> > <p><%= recipe_part_form.text_field :description %></p> > <% end %> > <%= link_to "Add Part", {:controller => "recipes",:action => > "add_recipe_part", :id => @recipe.id} %> > <%= recipe_form.submit "Update" %> > <% end %> > <%= link_to ''Show'', @recipe %> | > <%= link_to ''Back'', recipes_path %> > > > The multiple RecipeParts list correctly, but within each part I get 1 > selection for the ingredients only, despite the data having a mixture > of 0-3 ingredients for the various parts. > > So - my recipe_part_form.fields_for line doesn''t seem to be iterating > over the recipe_ingredients properly , and I can''t work out why - I > think I''m using the identical structure that I did for the RecipeParts > - which works fine. > Secondly - the collection_select isn''t giving me a correct Selected > item - but this could be due to the first problem perhaps. > > Sorry if the post is too long/stupid/wrong but Rails/Ruby is proving > to be (BY FAR) the hardest and most obtuse environment I''ve tried > learning in almost 30 years of programming. After almost 3 months of > online tutorials,books, reading forums etc and experimentation I can''t > understand just how little I can get working in Rails. > > Ian > > -- > 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-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org > 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. > >-- 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-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org 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.
> > > class Recipe < ActiveRecord::Base > > has_many :recipe_parts > > accepts_nested_attributes_for :recipe_parts > > > class RecipePart < ActiveRecord::Base > > belongs_to :recipe > > has_many :recipe_ingredients > > has_many :ingredients, :through => :recipe_ingredients > > accepts_nested_attributes_for :recipe > > Is that what you meant? Should it be accepts_nested_attributes_for > :recipe_ingredients? > > Colin >Yes it should be ....for :recipe_ingredients Thank you. I guess I haven''t got to grips with what accept_nested_attributes_for was doing, or on which side of the relationship it''s supposed to go since I had it on both sides. So - with the first problem solved it took me 30 seconds to solve the 2nd one - finally I don''t feel entirely stupid. Thanks Colin. Ian -- 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-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org 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.